gpt4 book ai didi

JSF : use array values as parameters

转载 作者:行者123 更新时间:2023-12-04 14:35:38 25 4
gpt4 key购买 nike

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

在我的支持 bean 中,我将消息放入 flash Scope:

flash.put("error", exception.getType());

在页面上,此字符串以这种方式翻译:
<h:outputText value="#{bundle[flash.error]}"/>

工作正常。

现在我还希望能够将(任意数量的)参数放入消息文本中,这些参数将插入到我的 message.properties 中 i18n-property 的占位符中。因此,我将参数作为字符串数组放入 Flash Scope 中,如下所示:
//exception.getParameters returns String[]
flash.put("errorParams", exception.getParameters())

现在我还希望能够使用这个 String 数组作为 outputFormat 元素的参数,将它们插入到像 Welcome, {0} {1} 这样的属性中。 .
所以我尝试通过使用 ui:repeat 来实现这一点:
<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>

不幸的是,参数值被忽略并且 i18n 属性的占位符没有被替换,所以渲染的输出是 Welcome, {0} {1} .当使用“常规”中继器时,将数组元素显示为输出文本,它可以工作。所以 outputFormat 标记似乎不支持使用重复作为 child 。
该死,如此接近;)任何人都知道做我想做的事的好方法,或者是否有任何组件库支持类似的东西?

最佳答案

这里的问题是 ui:repeath:outputFormat 的渲染时子级它确实根本不支持。你想放多个 f:param元素直接作为 h:outputFormat 的子元素在构建期间。
c:forEach适合这个任务。 JSTL 核心标签(已经包含在 Facelets 中,因此您不需要安装任何额外的 JAR)在构建 View 树期间完成它们的工作,就在 JSF 轮到处理/呈现 View 树之前。

<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>

关于JSF <h :outputFormat>: use array values as parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3264629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com