I am creating a java program which dynamically add jsf component in my xhtml page in jsf 2.0. RIght now I am facing a weird problem. Below is my .java code and .xhtml code.
Firstly my getter of HtmlPanelGrid is called before command button action event. And when it returns grid, it added extra panel grid into grid object.
So when I click second time on the button, globalGrid child count is being 2 instead of 1.
My scope in @ViewScoped.
Please help regarding this.
Thanks in advance.
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);
}
}