JSF我需要用StringArray填充selectItems,但我需要先解析它

时间:2012-10-16 16:10:07

标签: java jsf

我创造了另一个问题,希望我能找到答案,但我走错了方向。以下是该问题供参考(How do I parse this into a MultiValued Map?

我从一个属性文件(使用Apache配置)中拉出一个String Array,并且该数组出现并且看起来像这样

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拒绝接受它。

2 个答案:

答案 0 :(得分:2)

  

我试图创建一个字符串和字符串数组的Map对象,但JSF拒绝接受它。

Map应该有效。您可以在our selectOneMenu tag wiki page中找到具体示例。映射键成为选项标签,映射值成为选项值。

你应该只知道选项值最终会在HTML响应中结束,在HTML value元素的<option>属性中如此

<option value="someValue">

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

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

当选择该选项时,该值又被提交到服务器端。但是,由于该值是一个难以理解的字符序列,因此无法以任何方式使用Java / JSF / EL将其转换回原始String[]值。

您也可以只传递包含名称的List<String>,而不是提供转换器。

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

处理表单提交时,您可以直接根据提交的名称从配置文件中获取关联的String[],或者将某些Map作为bean属性记住。

答案 1 :(得分:0)

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