Как сравнить 2 строки с <c: if>? - PullRequest
6 голосов
/ 14 февраля 2011

Я пытаюсь отобразить <h:outputText> или <h:commandLink> соответственно свойству String, возвращенному компонентом поддержки. У меня проблемы при сравнении строк .. Вот иллюстрация:

<c:if test='#{column.header ne "Details"}'>
     <h:outputText value="#{recordTable[column.property]}"/><br/>
</c:if>
<c:if test='#{column.header eq "Details"}'>
     <h:commandLink value="#{column.header}"
                    action="#{searchBean.goToWarehouse}"/><br/>
</c:if>

Однако сравнения не работают. Это правильный способ сделать это? Можно ли это сделать без <jsp:useBean....>, как это сделано в: JSP sample

Спасибо за любую помощь

1 Ответ

11 голосов
/ 14 февраля 2011

Вы, кажется, используете это в <h:dataTable>.Теги JSTL оцениваются только во время построения представления, а не во время визуализации представления.Это сводится к следующему: JSTL сначала работает сверху вниз, а затем передает полученный результат JSF, чтобы снова работать сверху вниз.В настоящее время теги JSTL оцениваются внутри таблицы данных JSF, итерированный элемент таблицы данных (атрибут в атрибуте var) недоступен для JSTL.Следовательно, результат теста всегда равен false.

Просто используйте вместо этого атрибут rendered компонента JSF.

<h:outputText value="#{recordTable[column.property]}" rendered="#{column.header ne 'Details'}"/>
<h:commandLink value="#{column.header}" rendered="#{column.header eq 'Details'}" action="#{searchBean.goToWarehouse}"/>
<br/>

Вот еще несколько примеров, как вы можете использовать атрибут rendered:

<h:someComponent rendered="#{bean.booleanValue}" />
<h:someComponent rendered="#{bean.intValue gt 10}" />
<h:someComponent rendered="#{bean.objectValue == null}" />
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" />
<h:someComponent rendered="#{!empty bean.collectionValue}" />
<h:someComponent rendered="#{!bean.booleanValue and bean.intValue != 0}" />
<h:someComponent rendered="#{bean.enumValue == 'ONE' or bean.enumValue == 'TWO'}" />

Независимо от конкретной проблемы, Roseindia не лучший ресурс обучения JSF.Я бы порекомендовал перейти на другие ресурсы.

...