无法更新不同ui中的元素:define

时间:2017-01-12 19:02:44

标签: ajax jsf primefaces

我正在使用具有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。

1 个答案:

答案 0 :(得分:1)

您正在尝试更新HTML元素。将<div id="rightSideDiv">替换为JSF组件<h:panelGroup id="rightSideDiv" layout="block">,它应该可以正常工作。