JSF переключение изображения - PullRequest
1 голос
/ 24 февраля 2011

Это продолжение вопроса Использованиес перечислением

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

Первая проблема заключается в том, что h: graphicImage автоматически генерирует абсолютный путь к изображению для тега imgиспользуя текущий путь портлета.Пример: мне нужно http://myserver/mytheme/portlet/image.gif, но если я использую <h:graphicsImage value="#{myNs:getThemePath()}image.gif" />, вместо этого будет отображаться http://myserver/myportlet/mytheme/portlet/image.gif;, использование <img src="#{myNs:getThemePath()}image.gif" /> отлично работает.

Как указано в другом вопросе, янужно переключаться между изображениями, основываясь на условии итерирующего элемента в таблице ICEFaces, AND Мне также нужно (из соображений доступности) разместить правильный атрибут alt с локализованным ресурсом.

Вкратце, мой код похож на следующий (ice:dataTable опущен)

<h:column>
    <f:facet name="header">
        <ice:outputText value="#{myNs:getLocale('state')}" />
    </f:facet>
    <img alt="[[TODO]]" src="#{myNs:getThemePath()}#{item.state == 'COMPLETED' ? 'ok' : 'ko'}.gif"
</h:column>

Часть src работает, но теперь возникают проблемы.

Если я использую alt="#myNs:getLocale('prefix.#{item.state = 'COMPLETED' ? 'completed' : 'canceled'}')}, я могу 'вложенные выражения (не оцениваются)

Если я создаю два тега <h:graphicsImage для двух случаев (нет необходимости использовать сложные выражения в alt) и использую атрибут rendered, как описанов принятом ответе на другой вопрос я не могу правильно отобразить URL изображения.

Я также не могу использовать тег <c:when, потому что, как объяснено в другом вопросе, он всегда оценивается как ложный.

Что я могу сделать, чтобы встретиться сquirements?Как я могу использовать два тега <img и переключать их рендеринг в соответствии с моими условиями?

Спасибо

[добавить] К счастью, я получил следующее сообщение об исключении в журналах Tomcat при объединении выражения.Может ли кто-нибудь помочь мне лучше изучить выражения EL?Я совершенно новичок в JSF

Caused by: org.apache.el.parser.ParseException: Encountered "#" at line 1, column 32.
Was expecting one of:
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <STRING_LITERAL> ...
    "true" ...
    "false" ...
    "null" ...
    "(" ...
    "!" ...
    "not" ...
    "empty" ...
    "-" ...
    <IDENTIFIER> ...
    <FUNCTION_CALL> ...

Ответы [ 2 ]

5 голосов
/ 24 февраля 2011

Чтобы ответить на конкретный вопрос о возможности условного рендеринга простого ванильного HTML; просто оберните их в компонент JSF, который поддерживает атрибут rendered, но сам по себе ничего не выводит.

<h:panelGroup rendered="#{item.state == 'COMPLETED'}">
    <img src="ok.gif" />
</h:panelGroup>
<h:panelGroup rendered="#{item.state == 'CANCELLED'}">
    <img src="ko.gif" />
</h:panelGroup>

Вы также можете использовать <ui:fragment> вместо того, чтобы использовать Facelets. Это немного меньше накладных расходов.

1 голос
/ 24 февраля 2011

Похоже, я решил это сам за 10 минут.Позвольте мне рассказать, как.

Возможно комбинированное выражение, но просто не нужно # {} снова !!!!Что за глупость (я говорил, что я абсолютный новичок?)

#{item.state = 'COMPLETED' ? myNs:getLocale('prefix.completed') myNs:getLocale('prefix.canceled')}

работает

...