首页 文章

为什么commandButton动作侦听器不起作用?

提问于
浏览
0

我正在使用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

1 回答

  • 1

    使用2.1.3版本的Mojarra代替2.0.3解决了问题 .

相关问题