首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF <h:outputFormat>:使用数组值作为参数

JSF <h:outputFormat>:使用数组值作为参数
EN

Stack Overflow用户
提问于 2010-07-16 12:05:31
回答 1查看 5.2K关注 0票数 6

在我的JSF2页面上,我使用国际化的错误消息。

在我的后台bean中,我将消息放入闪存范围:

代码语言:javascript
复制
flash.put("error", exception.getType());

在该页上,此字符串将按以下方式进行翻译:

代码语言:javascript
复制
<h:outputText value="#{bundle[flash.error]}"/>

效果很好。

现在,我还希望能够将(任意数量的)参数放入消息文本中,这些参数被插入到我的message.properties中i18n-属性的占位符中。因此,我将参数作为字符串数组放入Flash作用域中,如下所示:

代码语言:javascript
复制
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())

现在,我还希望能够使用这个字符串数组作为outputFormat元素的参数,将它们插入像Welcome, {0} {1}这样的属性中。因此,我试图通过使用ui实现这一目标:重复

代码语言:javascript
复制
<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标记似乎不支持作为子级使用重复。该死,太接近了;)有人知道我想做什么,或者有任何组件库支持这样的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-16 12:35:35

这里的问题是,ui:repeath:outputFormat的呈现时子代,实际上它根本不支持它。您希望在构建时将多个f:param元素直接作为h:outputFormat的子元素。

c:forEach适用于此任务。JSTL核心标记(它已经包含在Facelets中,因此您不需要安装任何额外的JAR)在构建视图树时完成他们的工作,就在JSF转向处理/呈现视图树之前。

代码语言:javascript
复制
<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>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3264629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档