这是代码:
<h:panelGrid columns="3" style="margin-left: auto; margin-right:auto;">
<f:facet name="header">
<rich:column colspan="2">
<h:outputText value="Ingrese datos del padre" />
</rich:column>
</f:facet>
<label for="padreRut">RUT</label>
<h:inputText id="padreRut" value="#{IngresoAlumno.padre.per_Rut}">
<a4j:ajax event="keyup" render="formPadre" immediate="true" />
<f:validateLongRange minimum="0" />
</h:inputText>
<rich:message for="padreRut" ajaxRendered="true" />
</h:panelGrid>
<h:panelGrid id="formPadre" columns="3" style="margin-left: auto; margin-right:auto;" rendered="#{IngresoAlumno.padre.per_Rut gt 0}">
//...From here on there are form elements
问题是当我触发事件时,第二个panelGrid将不会呈现。我在这里做错了吗?先谢谢你。
答案 0 :(得分:2)
ajax魔术由JavaScript代码执行,该代码在客户端运行并在HTML DOM树上运行。通过指定render="someId"
,您基本上告诉JavaScript使用给定的ID替换JSF组件的HTML表示,并在检索到的ajax响应中使用新的HTML表示。
但是,如果首先由JSF呈现具有给定ID的JSF组件的HTML表示不,则JavaScript无法在HTML DOM树中找到任何要替换的内容。
这就是你的情况。您应该指定始终呈现的JSF组件的ID,以便JavaScript可以找到它并在必要时在HTML DOM树中更新它。您可以使用<h:panelGroup>
。
<a4j:ajax ... render="formPadre" />
...
<h:panelGroup id="formPadre">
<h:panelGrid ... rendered="#{IngresoAlumno.padre.per_Rut gt 0}">
...