【问题标题】:rowToggle action reset selectOneMenu value in rowExpansionrowToggle 操作重置 rowExpansion 中的 selectOneMenu 值
【发布时间】:2016-10-19 10:54:44
【问题描述】:

我的 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"/>

【问题讨论】:

    标签: jsf primefaces


    【解决方案1】:

    出现这个问题是因为rowExansion中的数据没有发送到服务器,所以在服务器端数据会是旧的

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

    您可以通过以下方式解决问题 1-在

    处添加&lt;h:link&gt;
    <p:column>
            <p:rowToggler></p:rowToggler> 
            <h:link onclick="makeRowHidden()"/>
    </p:column>
    

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

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

    【讨论】:

    • 我能知道它在 makeRowHidden() 函数中的作用吗?每当我更改 selectOneMenu 中的值时,我确实有 ajax 来更新我在服务器中的值。
    • makeRowHidden() 将样式 p:dataTable 更改为 display:none ,当我再次折叠时,它将设置 display:block
    • 我的场景有点不同,在 p:rowExpansion 中有一个 selectonemenu 并且我给了 ajax 调用来更改事件,因此对于 selectonemenu 值的每次更改都会进行处理。现在的问题是,当时我有非 ajax 调用 rowExpansion 被折叠并且 selectonemenu 值设置为空(“”)。如何为此设置正确的值。如果我手动折叠和展开,那么值不会改变(工作正常)。
    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 1970-01-01
    • 2011-05-05
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    相关资源
    最近更新 更多