这是代码:
<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 将不会呈现。我在这里做错了什么吗?预先谢谢您。
最佳答案
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}">
...
另请参阅:
关于jsf - a4j :ajax won't render h:panelgrid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11835698/