gpt4 book ai didi

java - 为什么命令按钮操作监听器不起作用?

转载 作者:行者123 更新时间:2023-12-01 15:43:25 25 4
gpt4 key购买 nike

我正在将 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 单独实现为公共(public)内部类,然后得到下一个:

           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

最佳答案

使用2.1.3版本的Mojarra代替2.0.3已经解决了问题。

关于java - 为什么命令按钮操作监听器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7613173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com