【问题标题】:Why does commandButton action listener does not working?为什么 commandButton 动作监听器不起作用?
【发布时间】:2011-11-28 14:46:30
【问题描述】:

我在 JSF2.0 和 Tomcat 6 中使用 Primefaces 组件。目标是从 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

【问题讨论】:

  • 你什么时候打电话给createComponents()?与具体问题无关,我建议您重新考虑这种方法。 &lt;h:dataTable&gt; 或可能是 &lt;p:dataGrid&gt;&lt;p:dataList&gt; 更容易。 stackoverflow.com/questions/3409053/…
  • 我在调用 bean 构造函数时调用此方法。使用 datatable 对我不利,因为我想将页面中的不同组件动态添加到我想要的位置。
  • 好,回到问题,有&lt;h:form&gt;父母吗?
  • 是的,当然,p:panel 在里面
  • 服务器日志中有异常吗?我希望在这里看到IllegalStateException。 EL 不能访问/创建匿名类的实例。另见stackoverflow.com/questions/5432897/…

标签: java jsf jsf-2 primefaces dynamic-forms


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-06-11
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多