14.4. 方法表达式

方法表达式的写法与值表达式类似,但是不是用来接收和设置托管Bean的属性。方法表达式是用来调用托管Bean的公共非静态方法。方法表达式语法是值表达式语法的子集,只能使用访问类型的操作符(圆点操作符.和方括号操作符[])遍历对象层次结构来访问公共非静态方法,其它的算术、关系、逻辑、条件、空值操作符对方法表达式不适用。

例如下面的代码点击按钮后会执行testBean的buttomClick()方法。

<w:button label="提交" action="#{testBean.buttomClick}" />

注意:不能向EL方法表达式传递参数。方法表达式的参数取决于使用方法表达式的上下文环境。具体细节参考下表:

表 14.3. 各接口(构件)方法表达式参数细节

接口类型标签属性参数说明
ActionSource(ActionSource2)action激活构件时调用的方法,其结果会引起导航
ActionSource(ActionSource2)actionListenerActionEvent激活构件时调用的方法
EditableValueHoldervalueChangeListenerValueChangeEvent检测到某个构件的值发生变化时被调用
f:view标签特有beforePhasePhaseEvent请求处理生命周期的2-6阶段执行之前被调用
f:view标签特有afterPhasePhaseEvent请求处理生命周期的2-6阶段执行之后被调用

需要注意的是:ActionSource构件的action属性有点特殊,但既可以接受方法表达式也可以接受字符串。当指定的是字符串时,EL系统会创建一个特殊的EL方法表达式,它只会导航,不会执行其它方法。