在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