[英]Why does commandButton action listener does not working?
我正在将Primefaces组件与JSF2.0和Tomcat 6一起使用。目标是从Bean动态创建服务器组件。 为了测试,我做了下一件事情:
private Panel editorPanel;
private CommandButton btn;
public void createComponents()
{
this.setEditorPanel(new Panel());
this.getEditorPanel().setRendered(true);
btn = new CommandButton();
btn.setId("btn1");
btn.setRendered(true);
btn.setAjax(true);
btn.setValue("Click!");
btn.addActionListener(new ActionListener()
{
@Override
public void processAction(ActionEvent arg0) throws AbortProcessingException
{
addNewButton();
}
});
this.getEditorPanel().getChildren().add(btn);
}
public void addNewButton()
{
CommandButton btn2 = new CommandButton();
btn2.setRendered(true);
this.getEditorPanel().getChildren().add(btn2);
}
标记:
<p:panel binding="#{mybean.editorPanel}">
</p:panel>
在第一页,呈现加载按钮。 按下按钮后,由于请求而重新创建了我的bean,但是从未触发“ addNewButton”方法的断点。 在该请求之后,按钮将消失。 Bean被标记为@RequestScoped和@ManagedBean(name =“ mybean”)。 标记中未动态呈现的其他组件可以成功使用bean方法。 我用这个按钮做错了什么?
谢谢
编辑:我知道我可以在同一方法中将按钮添加为上一个按钮,但是目标是动态添加一些组件。
编辑2:我将ActionListener单独实现为公共内部类,然后得到下一个:
Caused by: java.lang.InstantiationException:web.beans.pages.TemplateEditBean$BtnListener
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at javax.faces.component.StateHolderSaver.restore(StateHolderSaver.java:103)
... 90 more
使用Mojarra 2.1.3版本代替2.0.3解决了问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.