在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如?
這不是工作,檢查我的編輯在原來的問題,請。 :) – 2014-11-08 15:18:44
@JordiCastilla如果這不起作用,那麼在你的代碼中必須有一個* addtional *無關的問題。在調用registerVisitBean.paid時檢查返回值是什麼(例如,將一些System.out放在getter方法中)......可能你的bean類也有缺陷。你應該提供bean的代碼(包括使用的import語句等) – stg 2014-11-08 15:43:08
true,方法'公共無效payMembership()'只執行一次...但沒有錯誤顯示:(我必須調查更多... – 2014-11-08 16:39:02