0

我创建了另一个问题,希望能找到答案,但我走错了方向。这是供参考的问题(如何将其解析为多值映射?

我从属性文件中拉出一个字符串数组(使用 Apache 配置),然后数组进来,看起来像这样

name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13...

这是JSF的一部分

<f:selectItems itemValue="#{mainBean.information}" value="#mainBean.information}" />

这是Java的片段

Private String [] information;
information = config.getStringArray("information"); // This brings in this string from the property file

我一直在参考这个http://www.horstmann.com/corejsf/refcard.html

因此,就我在这里所拥有的而言,我刚刚发布了。它将填充该字符串数组的每个元素。我只希望显示“名称”并将其他三个值作为实际“值”传递。

我试图制作一个 Map 对象,它是一个字符串和一个字符串数组,但 JSF 拒绝接受它。

4

2 回答 2

2

我试图制作一个 Map 对象,它是一个字符串和一个字符串数组,但 JSF 拒绝接受它。

AMap应该工作。您可以在我们的selectOneMenu标签 wiki 页面中找到具体示例。映射键成为选项标签,映射值成为选项值。

您应该只意识到选项值最终会出现在 HTML 响应中,在valueHTML 元素的属性中,<option>就像这样

<option value="someValue">

由于 HTML 实际上是纯文本,因此如果不先转换它们,就无法在 HTML 中表示非标准 Java 对象。AString[]是非标准的,当您没有明确指定转换器时,默认情况下,Object#toString()结果将内联在 HTML 中,并且String[]看起来像

<option value="[Ljava.lang.String;@1860045">

Exactly that value is in turn thus submitted to the server side when the option is selected. 但是,由于该值是一个难以理解的字符序列,因此无法String[]使用 Java/JSF/EL 以任何方式将其转换回原始值。

除了提供转换器,您还可以只传递List<String>包含名称的 a。

<h:selectOneMenu value="#{bean.name}">
    <f:selectItems value="#{bean.names}" />
</h:selectOneMenu>

在处理表单提交时,您可以直接从配置文件或一些被记住为 bean 属性String[]的提交名称中获取相关的返回。Map

于 2012-10-16T17:36:14.950 回答
0

好吧,在 JSF 2.0Map中为<f:selectItems>我工作。您可以尝试为每个选项创建 JSF SelectItem如下所示。它应该工作。

于 2012-10-16T16:25:29.277 回答