提问人:Sergio 提问时间:7/6/2022 更新时间:7/23/2022 访问量:168
更新 <p:outputpanel> 时遇到问题
Trouble updating <p:outputpanel>
问:
好的,我的问题是我无法从 ajax 更新组件 (cursos),我真的不知道为什么。
这是我的代码:
罗尔 <h:selectManyCheckbox value="#{usuarioSession.roles}" id="admin" disabled="#{checkView.validarAdm}">
<f:selectItem itemValue="1" itemLabel="Administrador"></f:selectItem>
<p:ajax listener="#{checkView.checkBoxAdmin()}" update="est"></p:ajax>
</h:selectManyCheckbox>
<h:selectManyCheckbox value="#{usuarioSession.roles}" id="doce" disabled="#{checkView.validarDoc}">
<f:selectItem itemValue="2" itemLabel="Docente"></f:selectItem>
<p:ajax listener="#{checkView.checkBoxDoc()}" update="est, cursos"></p:ajax>
</h:selectManyCheckbox>
<h:selectManyCheckbox value="#{usuarioSession.roles}" id="est" disabled="#{checkView.validarEst}">
<f:selectItem itemValue="3" itemLabel="Estudiante"></f:selectItem>
<p:ajax listener="#{checkView.checkBoxEst()}" update="doce, admin"></p:ajax>
</h:selectManyCheckbox>
</div>
<p:outputPanel rendered="#{checkView.check2 == true}" id="cursos" >
<div class="mb-3">
<h:outputLabel class="form-label">Curso</h:outputLabel>
<h:selectManyCheckbox value="#{usuarioSession.cursos}">
<c:forEach items="#{crearCursoView.listarCurso()}" var="lc">
<f:selectItem itemValue="#{lc}" itemLabel="#{lc.nombre}"></f:selectItem>
</c:forEach>
</h:selectManyCheckbox>
</div>
</p:outputPanel>
答:
2赞
Melloware
7/6/2022
#1
你有一个非常常见的问题,因为如果你的输出面板没有被渲染,它就不在JSF树中,所以你无法更新它。秘诀是始终使用没有标志的包装器组件,因此您始终可以更新该包装器元素来显示和隐藏。使用以下示例并更新而不是rendered="#{checkView.check2 == true}"
rendered
p:outputPanel
cursosWrapper
cursos
<p:outputPanel id="cursosWrapper">
<p:outputPanel rendered="#{checkView.check2 == true}" id="cursos" >
<div class="mb-3">
<h:outputLabel class="form-label">Curso</h:outputLabel>
<h:selectManyCheckbox value="#{usuarioSession.cursos}">
<c:forEach items="#{crearCursoView.listarCurso()}" var="lc">
<f:selectItem itemValue="#{lc}" itemLabel="#{lc.nombre}"></f:selectItem>
</c:forEach>
</h:selectManyCheckbox>
</div>
</p:outputPanel>
</p:outputPanel>
...或使用 JSF 直通将标志添加到内部 DIV。jsf:rendered
<p:outputPanel id="cursosWrapper">
<div class="mb-3" jsf:rendered="#{checkView.check2 == true}">
<h:outputLabel class="form-label">Curso</h:outputLabel>
<h:selectManyCheckbox value="#{usuarioSession.cursos}">
<c:forEach items="#{crearCursoView.listarCurso()}" var="lc">
<f:selectItem itemValue="#{lc}" itemLabel="#{lc.nombre}"></f:selectItem>
</c:forEach>
</h:selectManyCheckbox>
</div>
</p:outputPanel>
上一个:多输入上的 XSL 筛选器
评论