繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM