2014-11-08 54 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