我正在使用具有ui:insert标记的模板。 在页面中我定义了(ui:define)其中两个(content,rightSide)。 我在rowSelect上有一个事件,因此右侧显示了一行的详细信息。 到目前为止,我还没能通过ajax更新rightSideDiv。
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
template="/WEB-INF/templates/template.xhtml">
<ui:define name="content">
<p:dataTable id="clasifTable" var="clasif" value="#{clasificacionController.clasificaciones}"
rows="10" sortMode="multiple" selectionMode="single" rowKey="#{clasif.idClasificacion}">
<p:ajax event="rowSelect" listener="#{clasificacionController.onClasificacionSelect}" update="rightSideDiv" />
<p:column headerText="Id" sortBy="#{clasif.idClasificacion}">
<h:outputText value="#{clasif.idClasificacion}" />
</p:column>
<p:column headerText="Descripción" sortBy="#{clasif.descripcion}">
<h:outputText value="#{clasif.descripcion}" />
</p:column>
</p:column>
</p:dataTable>
</ui:define>
<ui:define name="rightSide">
<div id="rightSideDiv">
<p:panelGrid columns="2">
<p:outputLabel for="idClasificacionText" value="id:" />
<p:inputText id="idClasificacionText" value="#{clasificacion.idClasificacion}"/>
<p:outputLabel for="descripcionText" value="Descripción:"/>
<p:inputText id="descripcionText" value="#{clasificacion.descripcion}"/>
<p:outputLabel for="detalleText" value="Detalle:"/>
<p:inputText id="detalleText" value="#{clasificacion.detalle}"/>
</p:panelGrid>
</div>
</ui:define>
</ui:composition>
这篇文章建议使用update="@all"
是我发现的唯一解决方法
ajax is not updating a component situated in another <ui:define
但显然这并不理想,因为整个页面都被重新渲染。此帖也是从2012年开始的,所以我希望有关于此的新内容。
我使用的是primefaces 6.0和jsf 2.1。
答案 0 :(得分:1)
您正在尝试更新HTML元素。将<div id="rightSideDiv">
替换为JSF组件<h:panelGroup id="rightSideDiv" layout="block">
,它应该可以正常工作。