我想在不同的托管bean上使用相同的按钮执行多个操作,一个是作用域会话,另一个是请求.在我的例子中,我使用相同的bean.
的index.xhtml
<h:form>
<p:commandButton image="ui-icon ui-icon-notice" action="#{controller.inc()}" update="result">
<f:actionListener type="controller.Controller" />
</p:commandButton>
</h:form>
<p:panel id="result">
#{controller.count}
</p:panel>
Run Code Online (Sandbox Code Playgroud)
controller.Controller.java
@Named(value = "controller")
@SessionScoped
public class Controller implements ActionListener, Serializable
{
int count = 0;
public Controller(){
System.out.println("new");
}
public void inc(){
count += 1;
}
public int getCount(){
return count;
}
@Override
public void processAction(ActionEvent event) throws AbortProcessingException{
count += 1000;
}
}
Run Code Online (Sandbox Code Playgroud)
当我按下按钮时,计数增加1而不是1001,并创建一个新的bean.我做错了什么 ?
谢谢.
这是预期的行为.在<f:actionListener type>创建并得到每声明自己的bean实例.它不重用由JSF管理的相同会话范围bean.
您需要使用binding绑定到已创建的会话范围bean实例.
<f:actionListener binding="#{controller}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |