p:selectOneMenu与p:ajax在p:dataTable在p:a​​jax rowEditCancel事件后不复位

时间:2014-10-30 08:39:42

标签: jsf primefaces

我在使用 p:dataTable 中的 p:ajax 元素重置 f:selectOneMenu 时出现问题模式。当我取消行编辑时,除了 f之外,每个字段(还有其他 f:selectOneMenu 元素,没有 p:ajax )的所有更改都会被正确重置: selectOneMenu ,其中包含 p:ajax 元素。

如果删除有关的 p:ajax 元素, f:selectOneMenu 也会正确重置。

我的问题可能出现的任何建议?

以下是有关xhtml代码段的内容:

<h:form id="tradingPartnersForm">   
  <p:dataTable id="tradingPartnerRow" styleClass="partnersTable" var="partnerText"
      value="#{tradingPartners.tradingPartnerList}" editable="true" >

    <p:ajax event="cellEdit" listener="#{tradingPartners.onRowEdit}" update=":messages" />
    <p:ajax event="rowEditCancel" listener="#{tradingPartners.onRowCancel}" update=":messages" />

    ... // other fields 

    <p:column headerText="#{someLabel}">
      <p:cellEditor>
        <f:facet name="output">
          <h:outputText value="#{partnerText.rolle}" />
        </f:facet>
        <f:facet name="input">
          <p:selectOneMenu value="#{partnerText.rolle}">
            <f:selectItems value="#{tradingPartners.partnerKindsMap.entrySet()}" var="partnerKindsEntry" itemValue="#{partnerKindsEntry.key}" itemLabel="#{partnerKindsEntry.value}" />
              <p:ajax event="change" execute="@this" update="l1group l2group" />
          </p:selectOneMenu>
        </f:facet>
      </p:cellEditor>
    </p:column>

    ... // other fields 

    <p:column style="width:32px">
      <p:rowEditor />
    </p:column>
  </p:dataTable>
</h:form>

1 个答案:

答案 0 :(得分:0)

好吧,接缝那个primefaces行编辑取消事件工作正常。问题是自制的,并且来自ajax调用:

<p:ajax event="change" execute="@this" update="l1group l2group" />

这里,在选择新值之后,通过ajax调用立即通过select内部使用的bean的属性。因此,从技术上讲,如果在取消编辑后重置选择,则会显示新选择的值。

似乎可以通过插入存储bean初始属性值的隐藏字段来更改此行为:

<p:column headerText="#{vtdb['acquirepartners.column5']}">
  <h:inputHidden value="#{partnerText.rolle}" id="partnerTextRoleBackup" />
  <p:cellEditor>
    <f:facet name="output"><h:outputText value="#{partnerText.rolle}" /></f:facet>
    <f:facet name="input">
      <p:selectOneMenu value="#{partnerText.rolle}">
        <f:selectItems value="#{tradingPartners.partnerKindsMap.entrySet()}" var="partnerKindsEntry" itemValue="#{partnerKindsEntry.key}" itemLabel="#{partnerKindsEntry.value}" />
        <p:ajax event="change" execute="@this" update="l1group l2group" />
      </p:selectOneMenu>
    </f:facet>
  </p:cellEditor>
</p:column>

但目前我对这种行为没有明显的解释!