我正在创建一个java程序,它在jsf 2.0中的xhtml页面中动态添加jsf组件。 现在我正面临一个奇怪的问题。下面是我的.java代码和.xhtml代码。
首先,在命令按钮动作事件之前调用HtmlPanelGrid的getter。 当它返回网格时,它会在网格对象中添加额外的面板网格。
因此,当我第二次点击按钮时,globalGrid子计数为2而不是1。
我在@ViewScoped中的范围。
请帮忙解决这个问题。
提前致谢。
testCustom.xhtml
<h:panelGrid binding="#{datatableBean.globalGrid}" /> <h:commandButton value="{bundle.newCaseInfoSheet_addAdditionalParty}" action="# {datatableBean.addNewAdditionalParties}" />
DatatableBean.java
public class DatatableBean{
public static HtmlPanelGrid globalGrid = new HtmlPanelGrid();
public int gridCounter = 1;
public void setGlobalGrid(HtmlPanelGrid globalGrid) {
this.globalGrid = globalGrid;
}
public HtmlPanelGrid getGlobalGrid() {
return globalGrid;
}
public HtmlPanelGrid getAdditionalParties(int i) {
HtmlPanelGrid mainGrid = null;
HtmlOutputText LNameText = new HtmlOutputText();
LNameText.setId("LNameText_"+i);
LNameText.setValue("Last Name");
HtmlInputText LNameInputText = new HtmlInputText();
LNameInputText.setId("LNameInputText_"+i);
mainGrid = new HtmlPanelGrid();
mainGrid.setId("mainGrid_"+i);
mainGrid.setColumns(2);
mainGrid.getChildren().add(LNameText);
LNameInputText.setSize(45);
mainGrid.getChildren().add(LNameInputText);
return mainGrid;
}
public void addNewAdditionalParties() {
System.out.println("\n In globalGrid Start -------->" + globalGrid.getChildCount() + "" );
if(gridCounter >= 2)
{
globalGrid = (HtmlPanelGrid)session.getAttribute("globalGrid");
globalGrid.getChildren().clear();
System.out.println("Grid COunt is --> " + gridCounter);
for(int i =1; i<=gridCounter; i++)
{
globalGrid.getChildren().add(getAdditionalParties(i));
}
}
else
{
globalGrid.getChildren().add(getAdditionalParties(1));
}
gridCounter++;
System.out.println("Grid Count after is --> " + gridCounter);
}
}