rowToggle操作重置rowExpansion中的selectOneMenu值

时间:2016-10-19 10:54:45

标签: jsf primefaces

我在rowExpansion中有selectOneMenu和inputText。每当我解开并重新转换特定行或切换到另一行时,selectOneMenu中的值将重置为我的noSelectOption,但我的inputText值仍保留在那里。

我在Primefaces 6.0上运行。

<p:dataTable id="idTableItemList" value="#{bean.itemList}" var="vo" rowKey="#{row}" rowIndexVar="row" rowExpandMode="single">

    <p:ajax event="rowToggle" listener="#{bean.onRowToggle}" global="false" 
        update=":idForm:idTableItemList:idTablePackage" />

    <p:column>
        <p:rowToggler></p:rowToggler> 
    </p:column>

    <p:rowExpansion>

        <p:dataTable id="idTablePackage" value="#{vo.packageList}" var="voSub" rowKey="#{row}"
        rowIndexVar="rowIndex">

            <p:column  headerText="Package Type" style="width:100px;">
                <p:selectOneMenu id="idPackage"
                value="#{voSub.packageType}">
                    <f:selectItem itemLabel="Select One" itemValue="" noSelectionOption="true" /> 
                    <f:selectItems value="#{bean.packageUDCList}" 
                    var="udc" itemLabel="#{udc.description}" itemValue="#{udc.code}"/>
                    <p:ajax update="idPackage" event="change" listener="#{bean.updateItemPackage(vo, voSub)}" global="false"/>
                </p:selectOneMenu>
            </p:column>
            <p:column  headerText="Quantity" style="width:40px;">
                <p:inputNumber id="idQuantity" value="#{voSub.quantity}"/>
            </p:column>
        </p:dataTable>
    </p:rowExpansion>
</p:dataTable> 

我将rowToggle更新为下面的代码,但仍然没有运气。

<p:ajax event="rowToggle" listener=“#{bean.onRowToggle}" global="false" 
        disabled=“#{bean.itemList.size() eq 0}"
        process=":idForm:idTableItemList:#{bean.rowIndex}:idTablePackage" 
        update=":idForm:idTableItemList:#{bean.rowIndex}:idTablePackage"/>

1 个答案:

答案 0 :(得分:0)

发生此问题是因为rowExansion中的数据未发送到服务器,因此在服务器端数据将是旧的

当您点击切换按钮时,该行将被删除,而不是设置为隐藏

你可以通过解决问题 1 - 在

添加<h:link>
<p:column>
        <p:rowToggler></p:rowToggler> 
        <h:link onclick="makeRowHidden()"/>
</p:column>

2-给h:link一个图标
3-使rowToggler图标隐藏

如果您需要更多详细信息,请说明,我会更新我的答案