簡體   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