К сожалению, JSF не предоставляет встроенные функциональные возможности, чтобы получить то, что вы хотите, так что в основном у вас есть три пути пойти:
- создать пользовательскую функцию EL, чтобы получить замещенное значение, как описано в Pass parameters to messages from resource bundle to components other than h:outputFormat,
- создать пользовательский компонент, который экспортирует замещенное значение как объем запроса переменный, видимый в EL контексте, как намекает в How to use Parameterized MessageFormat with non-Value attributes of JSF components или
- использовать решение, предложенное в полезной библиотеке 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>
Только что попробовал, что и он оказывается пустая кнопкой (значений) и текстовое сообщение от OUTPUTFORMAT рядом с ним , Мне нужна кнопка с параметризованным значением. – waste
Я обновил ответ и исправил ошибку. – skuntsel
Сначала я использую 'h: link'', но OmniFaces выглядит многообещающим. Большое спасибо за помощь. – waste