在我的JSF2页面上,我使用国际化的错误消息。
在我的backingbean中,我将消息放入flash范围:
flash.put("error", exception.getType());
在页面上,此字符串的翻译方式如下:
<h:outputText value="#{bundle[flash.error]}"/>
现在,我还希望能够将(任意数量的)参数放入消息文本中,这些参数被插入到my message.properties中i18n属性的占位符中。因此,我将参数作为字符串数组放入Flash范围,如下所示:
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())
现在我还希望能够使用这个字符串数组作为outputFormat元素的参数,将它们插入到类似
Welcome, {0} {1}
.
所以我试着用
ui:重复
:
<h:outputFormat value="#{bundle[flash.error]}" rendered="#{! empty flash.error}" class="invalid">
<ui:repeat value="#{flash.errorParams}" var="_param">
<f:param value="#{bundle[_param]}"/>
<!-- also doesn't work: <f:param value="#{_param}"/>-->
</ui:repeat>
</h:outputFormat>
不幸的是,param值被忽略,并且i18n属性的占位符没有被替换,因此呈现的输出被忽略
. 当使用“常规”中继器时,将数组元素显示为outputtext,就可以了。因此outputFormat标记似乎不支持将repeat用作子级。
该死,差一点;)有人知道一个好的方法来做我想做的事情,或者有任何组件库支持这样的东西吗?