0
我將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
你什麼時候調用'createComponents()'?與具體問題無關,我建議你重新考慮這種方法。 ''或可能''或''要容易得多。 http://stackoverflow.com/questions/3409053/jsf2-can-i-add-jsf-components-dynamically –
BalusC
我調用這個方法時,bean構造函數正在調用。使用數據表對我不好,因爲我想動態地將不同的組件添加到頁面到我想要的地方。 – Barbarian
好的回到這個問題,有沒有''父母? –
BalusC