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