2014-11-08 86 views
0

在JSF Primefaces/PrimefacesExtension應用程序中,我有一些Ajax錯誤行爲。Ajax無法在jsf視圖中工作

有觀點的一部分,只有所示,當條件爲真:

<h:form id="membership" rendered="#{empty registerVisitBean.partner.activeMembership.payDate}"> 

內,有2個格:第一個用紅色文字和按鈕進行操作(交納一定的會員)當動作完成這首電網將dissapear,和第二個將被顯示:

<p:panelGrid id="not_paid" layout="grid" columns="2" rendered="#{!registerVisitBean.paid}"> 
     <h:outputText value="No pagada" styleClass="data-text red" /> 
     <p:commandButton value="Pagar" actionListener="#{registerVisitBean.payMembership}" update="paid,not_paid" /> 
    </p:panelGrid> 

    <p:panelGrid id="paid" layout="grid" columns="1" rendered="#{registerVisitBean.paid}"> 
     <h:outputText value="#{registerVisitBean.partner.activeMembership.payDate}" styleClass="data-text" /> 
    </p:panelGrid> 

的看法是相當長的,但其他部分具有獨立的形式在這裏並不重要...的<form>標記不嵌套在其他<form>內,但它在o中療法<p:panelGrid>,但不是一個問題,我認爲,這是在相同的看法發生了拍攝動作後更改元素的顏色和完美的作品:

<h:form id="notes"> 
<p:panelGrid id="partner_notes" layout="grid" columns="1" > 
    <p:inputTextarea value="#{registerVisitBean.partnerNotes}" id="notes" rows="2" autoResize="false" styleClass="#{registerVisitBean.saved ? 'full-width unresizable success' : 'full-width unresizable'}" style="padding: 0"></p:inputTextarea> 
    <p:commandButton value="Guardar Notes" actionListener="#{registerVisitBean.updateNotes}" styleClass="full-width" update=":notes:partner_notes"/> 
</p:panelGrid> 
</h:form> 

我認爲問題出在<p:commandButton>,但我的update部分已經嘗試了幾種方法,但沒有成功。正在執行 bean代碼:

注意

private boolean paid; 
// (getter/setter) 

public void payMembership(){ 
    MembershipDto membership = partner.getActiveMembership(); 
    membership.setPayDate(new Date()); 
    membership.setMember(partner); 
    membership = partnerManagementFacade.updateMembership(membership); 
    if (membership != null){ 
     System.err.println("Paid > " + membership.getPayDate()); 
     paid = true; 
    } 
} 

使用Java代碼沒有問題,調試顯示一切順利的正確,但視圖後不被刷新。

EDIT1:根據@stg答案,我想unsuccesfully:

<p:outputPanel id="container"> 
<p:panelGrid id="not_paid" layout="grid" columns="2" rendered="#{!registerVisitBean.paid}"> 
    <h:outputText value="No pagada" styleClass="data-text red" /> 
    <p:commandButton value="Pagar" actionListener="#{registerVisitBean.payMembership}" update="container" /> 
</p:panelGrid> 

<p:panelGrid id="paid" layout="grid" columns="1" rendered="#{registerVisitBean.paid}"> 
    <h:outputText value="#{registerVisitBean.partner.activeMembership.payDate}" styleClass="data-text" /> 
</p:panelGrid> 

由於他回答說:

無法更新的一種成分,不是之前被渲染過,因爲它「不在」!

我覺得跟他的代碼,該問題將持續存在(第二面板電網不被渲染後的第一時間,所以我不能更新的原因不存在,它更新。

試圖避免這個問題,我決定更新<p:outputText>並從視圖中刪除<p:commandButton>

<h:form id="membership"> 
    <h:panelGroup id="not_paid" layout="block" rendered="#{empty registerVisitBean.partner.activeMembership.payDate}"> 
     <h:outputText value="#{registerVisitBean.paid ? registerVisitBean.partner.activeMembership.payDate : 'No pagada'}" styleClass="data-text red" /> 
     <p:commandButton value="Pagar" actionListener="#{registerVisitBean.payMembership}" update="not_paid,@this" rendered="#{!registerVisitBean.paid}"/> 
    </h:panelGroup> 
</h:form> 

相反的預期......這不是任何工作。「(

任何IDE如?

回答

0

你不能重漆你從未建造的牆!

這裏:你不能更新一個以前沒有渲染過的組件,因爲它「不在那裏」!

你可能做的是你的窩在周圍outputpanel panelGrid中並更新此outputpanel,而不是電網:

<p:outputPanel id="container"> 
    <p:panelGrid id="not_paid" layout="grid" columns="2" rendered="#{!registerVisitBean.paid}"> 
     <h:outputText value="No pagada" styleClass="data-text red" /> 
     <p:commandButton value="Pagar" actionListener="#{registerVisitBean.payMembership}" update="container" /> 
    </p:panelGrid> 

    <p:panelGrid id="paid" layout="grid" columns="1" rendered="#{registerVisitBean.paid}"> 
     <h:outputText value="#{registerVisitBean.partner.activeMembership.payDate}" styleClass="data-text" /> 
    </p:panelGrid> 
</p:outputPanel> 
+0

這不是工作,檢查我的編輯在原來的問題,請。 :) – 2014-11-08 15:18:44

+1

@JordiCastilla如果這不起作用,那麼在你的代碼中必須有一個* addtional *無關的問題。在調用registerVisitBean.paid時檢查返回值是什麼(例如,將一些System.out放在getter方法中)......可能你的bean類也有缺陷。你應該提供bean的代碼(包括使用的import語句等) – stg 2014-11-08 15:43:08

+0

true,方法'公共無效payMembership()'只執行一次...但沒有錯誤顯示:(我必須調查更多... – 2014-11-08 16:39:02