1

我正在创建一个 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);
    }
}
4

0 回答 0