не работает в Dataatable - PullRequest
       6

не работает в Dataatable

1 голос
/ 07 апреля 2011

В таблице данных значение должно быть переведено, когда применяется определенное условие (ссылка включена):

<h:outputLink disabled="#{pluginSummary.linkEnabled}" target="_blank"  value="http://www.nessus.org/plugins/index.php">
    <c:choose>
        <c:when test="#{not pluginSummary.isLinkEnabled()}" >
            <h:outputText value="#{pluginSummary.pluginid}"/>
        </c:when>
        <c:otherwise>
            <h:outputText value="#{texts[pluginSummary.pluginid]}"/>
        </c:otherwise>
    </c:choose>
    <f:param name="id" value="#{pluginSummary.pluginid}"/>
    <f:param name="view" value="single"/>
</h:outputLink>

Но, как ни странно, применяется только первое условие, и никогда не бывает перевода. Для отладки я также добавил <h:outputText value="#{pluginSummary.isLinkEnabled()}/>, и там я вижу разные истинные и ложные записи, но текст никогда не переводится.

Кто-нибудь знает, работает ли c: select в таблице данных? Каковы мои альтернативы?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

JSTL-теги и JSF-теги не работают синхронно, как вы ожидаете от кодирования.Теги JSTL выполняются во время построения представления, а теги JSF выполняются во время визуализации представления.Вы можете визуализировать это следующим образом: JSTL сначала работает сверху вниз, а затем передает сгенерированный результат (без каких-либо тегов JSTL!) В JSF, который, в свою очередь, снова запускается сверху вниз, чтобы создать HTML для веб-браузера.

Я понимаю, что #{pluginSummary} определяется как var данных.В момент запуска JSTL эта переменная недоступна, поэтому в этот момент она всегда равна null.

Вам нужно использовать теги / атрибуты JSF.В данном конкретном случае вы хотите использовать вместо этого атрибут JSF rendered.

<h:outputText value="#{pluginSummary.pluginid}" rendered="#{not pluginSummary.linkEnabled}" />
<h:outputText value="#{texts[pluginSummary.pluginid]}" rendered="#{pluginSummary.linkEnabled}"/>

(обратите внимание, что я также изменил вызов метода на свойство, поскольку это более понятно, поскольку вам не нужнопередать любые аргументы)

0 голосов
/ 07 апреля 2011

Один из них - тег jstl, остальные - компоненты jsf. У них разное время оценки.

Вы должны использовать атрибут rendered компонентов для их условного рендеринга.

...