为什么commandButton动作监听器不工作?

为什么commandButton动作监听器不工作?

问题描述:

我将Primefaces组件与JSF2.0和Tomcat 6一起使用。目标是从bean动态创建服务器组件。只是为了测试我做的下一件事:为什么commandButton动作监听器不工作?

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 
+0

你什么时候调用'createComponents()'?与具体问题无关,我建议你重新考虑这种方法。 ''或可能''或''要容易得多。 http://stackoverflow.com/questions/3409053/jsf2-can-i-add-jsf-components-dynamically – BalusC

+0

我调用这个方法时,bean构造函数正在调用。使用数据表对我不好,因为我想动态地将不同的组件添加到页面到我想要的地方。 – Barbarian

+0

好的回到这个问题,有没有'

'父母? – BalusC

使用2.1.3版钻嘴鱼科,而不是2.0.3已经解决了问题。