p:ajax更新在单击commandlink后不起作用

p:ajax更新在单击commandlink后不起作用,ajax,jsf-2,primefaces,commandlink,Ajax,Jsf 2,Primefaces,Commandlink,我有一个jsf页面,用于添加来自客户端的订单。 除了单击commandLink显示p:对话框以添加新客户机,“reste”inputtext上的更新停止工作(即使我在不添加新客户机的情况下关闭p:对话框),所有操作都正常: 客户名单: <strong>Client :</strong>< <p:autoComplete id="client" value="#{venteSolaireBean.client}" completeMethod=

我有一个jsf页面,用于添加来自客户端的订单。
除了单击commandLink显示p:对话框以添加新客户机,“reste”inputtext上的更新停止工作(即使我在不添加新客户机的情况下关闭p:对话框),所有操作都正常:

客户名单:

<strong>Client :</strong><
<p:autoComplete
   id="client"
   value="#{venteSolaireBean.client}"
   completeMethod="#{venteSolaireBean.autocompleteClient}"
   var="item"
   itemLabel="#{item.nom} #{item.prenom}"
   itemValue="#{item}"
   converter="#{venteSolaireBean.clientConverter}"
   dropdown="true" 
   scrollHeight="200" >
</p:autoComplete>
我通过记录calcul()函数进行了检查,我确信它已被调用,并且给setReste()的值是正确的

我不明白为什么inputtext没有更新。

请帮助。

我认为验证存在一些问题。由于
immediate=true
通常会导致此类问题,并且您没有使用按钮上的任何primefaces功能来显示对话框,因此您应该将
p:commandButton
替换为普通HTML
按钮来显示“添加客户端”对话框。

为什么要使用
immediate=“true”
?跳过验证第一个表单,因为我使用了两个表单,一个用于“客户订单”,另一个用于“添加客户”对话框,但您没有使用显示对话框的按钮提交任何内容。实际上,你不需要
p:commandButton
它也可以是一个普通的
按钮,因为你没有用这个按钮做任何JSF特定的事情。哦,是的,最好的方法是最简单的,我非常关注JSF,我忘记了简单的html,谢谢你的提示。写一个答案,我会接受的,
<p:commandLink onclick="dlgClient.show()" immediate="true">
   <img src="images-main/add-icon.gif" border="0" alt="Add Client" class="img-action"/>
</p:commandLink>
<strong>Montant :</strong>
<p:inputText value="#{venteSolaireBean.venteSolaire.montant}">
    <p:ajax event="keyup" update="reste" listener="#{venteSolaireBean.calcul}" />
</p:inputText>

<strong>Avance :</strong></td>
<p:inputText value="#{venteSolaireBean.venteSolaire.avance}">
    <p:ajax event="keyup" update="reste" listener="#{venteSolaireBean.calcul}" />
</p:inputText>

<strong>Reste :</strong></td>
<p:inputText id="reste" value="#{venteSolaireBean.venteSolaire.reste}">
</p:inputText>
public void calcul() {
    venteSolaire.setReste(venteSolaire.getMontant() - venteSolaire.getAvance());
}