我注意到,如果我使用
<f:ajax .... execute="@form" render="@all" />
我的页面被重新加载,而使用
<p:ajax .... process="@form" update="@all" /> // note the "p"
它没有。
更新
我的布局的标题部分,此表单位于此处。
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<header>
<div style="padding: 5px 0; text-align: right">
<h:form id="frmSelectLang">
<h:selectOneMenu id="selectLang" value="#{userBean.locale}">
<f:selectItems value="#{userBean.availableLangs}" />
<!--f:ajax execute="@form" render="@all"/-->
<p:ajax process="@form" update="@all" />
</h:selectOneMenu>
</h:form>
</div>
</header>
</ui:composition>
虽然我可能更喜欢前一种(注释掉的)方法(由于坚持使用Facelets),但后者的页面重新加载解决了我与前者的问题。
即,如果我切换语言,然后通过页面主要部分中的另一个表单添加内容(上面的代码是标题 - lang切换器中另一个表单的一部分),则第一次单击无法识别。删除也是如此(项目旁边有一个ajax驱动的delete
按钮。)
更新2
这是我提交添加城市(Grad)的表单,添加后,每个输入旁边都有一个删除按钮:
<h:form id="frmGrad">
<h:inputText id="naziv" label="Naziv grada" size="40" required="true" requiredMessage="Polje ne smije biti prazno!" value="#{gradManager.naziv}" />
<h:commandButton id="submit" action="#{gradManager.kreiraj()}" value="#{btnlabels['btnSubmit']}">
<f:ajax execute="@form" render=":frmDelete:spisak :foobar"/>
</h:commandButton>
</h:form>
<hr />
<h:form id="frmDelete">
<h:dataTable id="spisak" value="#{gradManager.gradovi}" var="grad">
<h:column>
<h:commandButton id="submit" action="#{gradManager.obrisi(grad.id)}" value="Obriši">
<f:ajax execute="@form" render="frmDelete:spisak foobar" />
</h:commandButton>
</h:column>
<h:column>#{grad.naziv}</h:column>
</h:dataTable>
</h:form>
有没有方便的方法来解决这个问题?尽管事实上我最终可能会使用这种工作方法,但我想知道这个原因。