我创造了另一个问题,希望我能找到答案,但我走错了方向。以下是该问题供参考(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拒绝接受它。
答案 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中所示。它应该工作。