Почему слушатель действия commandButton не работает? - PullRequest
0 голосов
/ 30 сентября 2011

Я использую компоненты 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>

На первой странице отображается кнопка загрузки.После нажатия кнопки мой бин воссоздается из-за запроса, но точка останова в методе addNewButton никогда не срабатывает.После этого запроса кнопка исчезает.Бин помечается как @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 голос
/ 01 октября 2011

Использование версии Mojarra 2.1.3 вместо 2.0.3 решило проблему.

...