在primefaces中编辑单元格后表格也会消失(数据未保存)

时间:2015-04-12 13:15:23

标签: ajax jsf primefaces

我在页面上有一个输入字段和一个表。只要字段中的数字发生变化(ajax监听器改变事件) - 我希望相应的行数发生变化。

我将表格指向了Backing bean中的Arraylist,然后播放它的大小。

但是当我在表格中编辑一个值 - 然后按回车键时,表格会消失,只有当我再次更改字段值时才会重新显示。

作为奖励,在调试模式下,我看到支持arraylist总是有空值。

这里是Bean代码:

@ManagedBean(name = "bean")
@ViewScoped
public class TestBean {

    private List<String> hostnames = new ArrayList<String>();

    private int copiesQuantityJustCopy;

    public int getCopiesQuantityJustCopy() {
        return copiesQuantityJustCopy;
    }

    public void setCopiesQuantityJustCopy(int copiesQuantityJustCopy) {
        this.copiesQuantityJustCopy = copiesQuantityJustCopy;
    }

    public List<String> getHostnames() {
        return hostnames;
    }

    public void setHostnames(List<String> hostnames) {
        this.hostnames = hostnames;
    }

    public void onUpdateCount() {
        int hostnamesCount = hostnames.size();
        System.out.println("delta = " + hostnamesCount + " - " + copiesQuantityJustCopy);
        int delta = hostnamesCount - copiesQuantityJustCopy;
        if (delta > 0)
            for (int i = 1; i < delta; i++)
                hostnames.remove(delta);
        if (delta < 0)
            for (int i = 0; i < -delta; i++)
                hostnames.add("");
    }
}

和查看代码:

<h:form id="form1">
    <p:inputMask mask="9?99" maxlength="3" placeHolder=" " value="#{bean.copiesQuantityJustCopy}">
        <p:ajax event="change" listener="#{bean.onUpdateCount()}" update=":form1:hostnamesTable" />
    </p:inputMask>

    <p:outputPanel id="hostnamesTable" rendered="true">
        <p:dataTable value="#{bean.hostnames}" var="hostname" 
            id="hostnames" editable="true" editMode="cell">

            <p:ajax event="cellEdit" update=":form1:hostnamesTable" process="@this" />

            <p:column>
                <p:cellEditor>
                    <f:facet name="output">
                        <h:outputText value="#{hostname}" />
                    </f:facet>

                    <f:facet name="input">
                        <p:inputText value="#{hostname}" style="width:96%" />
                    </f:facet>
                </p:cellEditor>
            </p:column>

        </p:dataTable>
    </p:outputPanel>
</h:form>

1 个答案:

答案 0 :(得分:2)

我认为我的答案不会帮助@Anton,但它可能对另一个&#34;堆叠器有帮助#34;面临同样的问题。

我的问题很相似(当cellEdit事件完成时,dataTable消失了)。在我的情况下,原因是由ajax执行的表更新。由于我真的不需要在监听器激活后进行表更新,所以我只是删除了更新属性,现在一切都对我很好。