Список содержит метод, не работающий на странице JSF - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть два списка, которые состоят из одного и того же объекта.

Я хочу проверить, содержит ли первый список объект второго списка

<ui:repeat var="item" value="#{userTypeController.permissionItems}">
    <c:if test="#{userTypeController.permissionItemsUserType.contains(item)}">
        <h:selectBooleanCheckbox value="#{true}"/> 
        <h:outputText value="#{item.getAction()}" />
    </c:if>
    <c:if test="#{!userTypeController.permissionItemsUserType.contains(item)}">
        <h:selectBooleanCheckbox value="#{false}"/> 
        <h:outputText value="#{item.getAction()}" />
    </c:if>
</ui:repeat>

но это, похоже, не работает, и все, что я получаю, является ложным.

Я изменил методы равенства и хэш-кода, но не помог.

1 Ответ

1 голос
/ 21 ноября 2011

JSTL-теги, такие как <c:if>, выполняются во время построения представления, и в результате получаются только компоненты JSF. Компоненты JSF выполняются во время визуализации представления, и в результате получается только HTML. Они не работают синхронно. Теги JSTL сначала выполняются сверху вниз, а затем компоненты JSF работают сверху вниз.

В вашем случае, когда JSTL-теги выполняются, нигде нет никакого значения #{item}, потому что он был определен компонентом JSF, поэтому для JSTL он всегда будет оцениваться, как если бы он был null. Вам нужно использовать компоненты JSF. В вашем конкретном случае <h:panelGroup rendered> должен сделать это:

<ui:repeat var="item" value="#{userTypeController.permissionItems}">
    <h:panelGroup rendered="#{userTypeController.permissionItemsUserType.contains(item)}">
        <h:selectBooleanCheckbox value="#{true}"/> 
        <h:outputText value="#{item.getAction()}" />
    </h:panelGroup>
    <h:panelGroup rendered="#{!userTypeController.permissionItemsUserType.contains(item)}">
        <h:selectBooleanCheckbox value="#{false}"/> 
        <h:outputText value="#{item.getAction()}" />
    </h:panelGroup>
</ui:repeat>

Смотри также:

...