是否可以使用单个命令组件调用多个侦听器方法?例如,
视图范围的bean:
@ManagedBean
@ViewScoped
public final class ViewScopedBean implements Serializable
{
@ManagedProperty(value = "#{sessionScopedBean}")
private SessionScopedBean sessionScopedBean; //Getter/Setter.
private static final long serialVersionUID = 1L;
public ViewScopedBean() {}
public void action()
{
//Do something.
sessionScopedBean.action();
}
}
Run Code Online (Sandbox Code Playgroud)
会话范围的bean:
@ManagedBean
@SessionScoped
public final class SessionScopedBean implements Serializable
{
private static final long serialVersionUID = 1L;
public SessionScopedBean () {}
public void action() {
//Do something.
}
}
Run Code Online (Sandbox Code Playgroud)
一个命令按钮,如下所示,
<h:commandButton value="Action" actionListener="#{viewScopedBean.action}"/>
Run Code Online (Sandbox Code Playgroud)
调用该方法action(),ViewScopedBean然后通过注入该bean的实例来调用该action()方法SessionScopedBean.
是否有可能在XHTML上做同样的事情,以便可以消除只是为了调用方法而注入bean的需要?
Xtr*_*ica 15
<h:commandButton value="Action">
<f:actionListener binding="#{viewScopedBean.action()}"/>
<f:actionListener binding="#{sessionScopedBean.action()}"/>
</h:commandButton />
Run Code Online (Sandbox Code Playgroud)
请注意EL中括号的重要性.在这个特定的例子中省略它们否则会引起混淆javax.el.PropertyNotFoundException: Property 'action' not found on type com.example.ViewScopedBean,因为它默认被解释为值表达式.添加括号使其成为方法表达式.另请参阅为什么我能够将<f:actionListener>绑定到任意方法(如果JSF不支持它)?
您甚至可以通常的方式向组件添加actionListener和/或action方法,稍后会调用.它必须是唯一的action方法,它决定处理的结果.
无论如何,请记住,听众总是在行动之前被执行,并被认为是"热身".你最好的是在action方法中执行整个逻辑,即使你需要进行bean注入.
也可以看看:
| 归档时间: |
|
| 查看次数: |
11738 次 |
| 最近记录: |