在我的JSF2页面上,我使用国际化的错误消息。
在我的后台bean中,我将消息放入闪存范围:
flash.put("error", exception.getType());在该页上,此字符串将按以下方式进行翻译:
<h:outputText value="#{bundle[flash.error]}"/>效果很好。
现在,我还希望能够将(任意数量的)参数放入消息文本中,这些参数被插入到我的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-属性的占位符没有被替换,因此呈现的输出是Welcome, {0} {1}。当使用“常规”中继器(将数组元素显示为输出文本)时,它可以工作。因此,outputFormat标记似乎不支持作为子级使用重复。该死,太接近了;)有人知道我想做什么,或者有任何组件库支持这样的东西吗?
发布于 2010-07-16 12:35:35
这里的问题是,ui:repeat是h:outputFormat的呈现时子代,实际上它根本不支持它。您希望在构建时将多个f:param元素直接作为h:outputFormat的子元素。
c:forEach适用于此任务。JSTL核心标记(它已经包含在Facelets中,因此您不需要安装任何额外的JAR)在构建视图树时完成他们的工作,就在JSF转向处理/呈现视图树之前。
<html xmlns:c="http://java.sun.com/jsp/jstl/core">
...
<h:outputFormat value="#{bundle[flash.error]}" rendered="#{! empty flash.error}" class="invalid">
<c:forEach items="#{flash.errorParams}" var="_param">
<f:param value="#{bundle[_param]}"/>
</c:forEach>
</h:outputFormat>https://stackoverflow.com/questions/3264629
复制相似问题