Ing*_*her 6 jsf facelets jsf-2
在我的JSF2页面上,我正在使用国际化的错误消息.
在我的支持bean中,我将消息放入flash范围:
flash.put("error", exception.getType());
Run Code Online (Sandbox Code Playgroud)
在页面上,此字符串以这种方式翻译:
<h:outputText value="#{bundle[flash.error]}"/>
Run Code Online (Sandbox Code Playgroud)
工作良好.
现在我想能够将(任意数量的)参数放入消息文本中,这些参数将插入到message.properties中i18n属性的占位符中.因此,我将参数作为String数组放入Flash Scope中,如下所示:
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())
Run Code Online (Sandbox Code Playgroud)
现在我也希望能够使用这个String数组作为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>
Run Code Online (Sandbox Code Playgroud)
不幸的是,param值被忽略,并且i18n-property的占位符没有被替换,因此渲染的输出是Welcome, {0} {1}.当使用"常规"转发器时,将数组元素显示为输出文本,它可以工作.所以outputFormat标签似乎不支持使用repeat作为子元素.该死的,如此接近;)任何人都知道一个很好的方法来做我想要的,或者是否有任何组件库支持这样的东西?
这里的问题是它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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4827 次 |
| 最近记录: |