简体   繁体   English

p:ajax rowEditCancel事件后,p:dataTable中带有p:ajax的p:selectOneMenu不重置

[英]p:selectOneMenu with p:ajax in p:dataTable not reset after p:ajax rowEditCancel event

I have a problem concerning the reset of a f:selectOneMenu with a p:ajax element inside a p:dataTable with row edit mode. 我有一个关于使用行编辑模式在p:dataTable中重置带有p:ajax元素的f:selectOneMenu的问题。 When I cancel the row editing, all changes in every field (also other f:selectOneMenu elements without a p:ajax ) are correctly reset except for a f:selectOneMenu which contains a p:ajax element. 当我取消行编辑时,除包含p:ajax元素的f:selectOneMenu之外,每个字段(包括p:ajax的其他f:selectOneMenu元素)中的所有更改都将正确重置。

If I remove the concerning p:ajax element the f:selectOneMenu is as well reset correctly. 如果我删除了相关的p:ajax元素,则f:selectOneMenu也将正确重置。

Any advice where my problem may arise from? 有什么建议可以解决我的问题?

Here is the concerning xhtml snippet: 这是有关的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>

Okay, it seams that primefaces row edit cancel event works correct. 好吧,它表明素数行编辑取消事件工作正常。 The problem is homemade, and arises from the ajax call: 这个问题是自制的,并且是由ajax调用引起的:

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

Here the attribute of the bean which is used inside the select is chanced via the ajax call right after a new value is selected. 在这里,在选择一个新值之后,通过ajax调用就可以在select中使用bean的属性。 So technically if the select is reset after the edit is canceled it shows the newly selected value. 因此,从技术上讲,如果取消编辑后重置了选择,它将显示新选择的值。

It seems that this behavior can be changed by inserting a hidden filed storing the beans initial attribute value: 似乎可以通过插入存储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>

But at the moment I have no obvious explanation for this behavior! 但是目前,我对此行为没有明显的解释!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM