我正在创建一个 java 程序,它在 jsf 2.0 的 xhtml 页面中动态添加 jsf 组件。现在我面临一个奇怪的问题。下面是我的 .java 代码和 .xhtml 代码。
首先,在命令按钮操作事件之前调用我的 HtmlPanelGrid 获取器。当它返回网格时,它会在网格对象中添加额外的面板网格。
因此,当我第二次单击该按钮时,globalGrid 子项计数为 2 而不是 1。
我在@ViewScoped 中的范围。
请帮助解决这个问题。
提前致谢。
testCustom.xhtml
<h:panelGrid binding="#{datatableBean.globalGrid}" /> <h:commandButton value="{bundle.newCaseInfoSheet_addAdditionalParty}" action="# {datatableBean.addNewAdditionalParties}" />
数据表Bean.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);
}
}