Использование dataTable Primefaces

Я использую объект dataTable простых лиц для отображения некоторых данных, и у меня возникают проблемы с реализацией чего-либо: сначала я отображаю таблицу только с 1 столбцом, и я хочу отобразить другую таблицу, заполненную данными, в зависимости от того, что пользователь выбрал на первом один.

Для этого, когда пользователь выбирает строку в первой таблице, я заполняю запись currentCorbeilleId моего TaskController и пытаюсь обновить форму «tasksList». Это имеет смысл, когда я пишу это сейчас, но это не работает... Когда я нажимаю на строку первой таблицы, ничего не происходит...

Правильно ли я использую компонент dataTable? Что я должен сделать еще, чтобы заставить его работать? Спасибо за ваши ответы !

<f:view>
        <h:form id="mainForm">
            <p:dataTable id="corbeillesList"
                         value="#{IdentityController.groups}"
                         var="corbeillesList"
                         rendered="#{not empty IdentityController.groups}"
                         selectionMode="single"
                         selection="#{TaskController.currentCorbeilleId}"
                         update="tasksList">
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Name" />
                    </f:facet>
                    <h:commandLink value="#{corbeillesList.name}">
                    </h:commandLink>
                </p:column>
            </p:dataTable>
            <p:dataTable id="tasksList"
                         value="#{TaskController.tasks}"
                         var="task"
                         rendered="#{not empty TaskController.tasks}"
                         selectionMode="single">
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Date" />
                    </f:facet>
                    <h:outputText value="#{task.duedate}" rendered="#{task.duedate != null}">
                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" dateStyle="short" />
                    </h:outputText>
                    <h:outputText value="Date non definit" rendered="#{task.duedate == null}" />
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Name" />
                    </f:facet>
                    <h:outputText value="#{task.name}" />
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Description" />
                    </f:facet>
                    <h:outputText value="#{task.description}" />
                </p:column>
                <p:column>
                    <f:facet name="header">
                        <h:outputText value="Verouillee" />
                    </f:facet>
                    <h:outputText value="oui" rendered="#{task.assignee != null}" />
                    <h:outputText value="non" rendered="#{task.assignee == null}" />
                </p:column>
            </p:dataTable>
        </h:form>
    </f:view>

person MartinMoizard    schedule 29.10.2010    source источник


Ответы (1)


Вторая таблица данных не была отображена на стороне клиента. Так что он недоступен для ajax update. Вместо этого поместите его, например, в h:panelGroup, который всегда отображается на стороне клиента.

<h:panelGroup id="tasksList">
    <h:dataTable rendered="#{not empty TaskController.tasks}" ... >
        ...
    </h:dataTable>
</h:panelGroup>
person BalusC    schedule 30.10.2010
comment
Это не работает... Я пытаюсь сделать такое же обновление на другой странице, и даже с вашей панельной группой это не работает. - person MartinMoizard; 03.11.2010
comment
Ответ был нацелен на пример кода, который вы разместили в вопросе. Если рассматриваемый компонент не находится внутри одного и того же компонента UINamingContainer (h:form, f:subview и т. д.), вам необходимо добавить префикс : к идентификатору update, например update=":tasksList", чтобы он выполнял поиск с корневого уровня. - person BalusC; 03.11.2010