2013-07-30 4 views
0

Используя разметку JSF2, можно ли передать параметры параметров в значение кнопки? Я знаю <h:outputFormat>, но мне нужно, чтобы это была кнопка. Меня больше интересует нечто вроде ниже.Значение параметра JSF2 параметризовано?

Моего XHTML код:

<h:button value="#{webCommonMessages['notifications']}" outcome="..."> 
    <f:param value="1"/> 
</h:button> 

Мой webCommonMessages расслоение:

notifications=Notifications available: ({0}) 

Это, конечно, не работает, но есть ли решение/обходной путь для этого?

ответ

2

К сожалению, JSF не предоставляет встроенные функциональные возможности, чтобы получить то, что вы хотите, так что в основном у вас есть три пути пойти:

  1. создать пользовательскую функцию EL, чтобы получить замещенное значение, как описано в Pass parameters to messages from resource bundle to components other than h:outputFormat,
  2. создать пользовательский компонент, который экспортирует замещенное значение как объем запроса переменный, видимый в EL контексте, как намекает в How to use Parameterized MessageFormat with non-Value attributes of JSF components или
  3. использовать решение, предложенное в полезной библиотеке OmniFaces поддерживается BalusC в соответствии с компонентом <o:outputFormat>, который фактически включает в себя второй путь.

Итак, если вы до третьего пути, который я лично горячо рекомендую, решение в основном следующим образом:

<o:outputFormat value="#{webCommonMessages['notifications']}" var="t"> 
    <f:param value="1" /> 
</o:outputFormat> 
<h:button value="#{t}" outcome="..." /> 

Использование OmniFaces в проекте JSF смешного легко и descibed on its homepage , но повторить: просто добавьте его банку в папку/WEB-INF/lib вашего веб-приложения (или включите ее как зависимость от maven) и добавьте правильное пространство имен в ваших изображениях facelet, например xmlns:o="http://omnifaces.org/ui".

Также стоит добавить, что мой первоначальный ответ был неправильным. Он ошибочно предположил, что вложенность JSF <h:outputFormat> сделает необходимый HTML-элемент. Тем не менее, это верно и для обычной навигационной связи, как это предусмотрено в JSF, например, <h:link>, и должен быть использован как:

<h:link outcome="..."> 
    <h:outputFormat value="#{webCommonMessages['notifications']}"> 
     <f:param value="1" /> 
    </h:outputFormat> 
</h:link> 

Вы ошибочно полагают, что <f:param> вложенные в <h:button> будут включены в вашем сообщении из комплекта ресурсов. Он используется для добавления параметров запроса к сгенерированному URL. Вместо этого вы должны использовать <h:outputFormat> тег для вашей цели, вложенной в кнопке и, таким образом, не указав его value атрибута:

<h:button outcome="..."> 
    <h:outputFormat value="#{webCommonMessages['notifications']}"> 
     <f:param value="1" /> 
    </h:outputFormat> 
</h:button> 
+0

Только что попробовал, что и он оказывается пустая кнопкой (значений) и текстовое сообщение от OUTPUTFORMAT рядом с ним , Мне нужна кнопка с параметризованным значением. – waste

+0

Я обновил ответ и исправил ошибку. – skuntsel

+0

Сначала я использую 'h: link'', но OmniFaces выглядит многообещающим. Большое спасибо за помощь. – waste

Смежные вопросы