我有以下JSF构造:
<c:set var="myVar" value="#{myBean.getMyMap()}" scope="request" />
<h:form>
<p>
<h:outputText value="Output1: " />
<h:selectOneMenu value="#{myMappingsBean.data.attribute1}" binding="#{input1}" required="true">
<f:selectItems var="entry" value="#{myVar}"/>
<p:ajax update="myDropdown"/>
</h:selectOneMenu>
</p>
<p>
<h:outputText value="Output2: " />
<h:selectOneMenu id="myDropdown" value="#{myMappingsBean.data.attribute2}" binding="#{input2}" required="true" converter="javax.faces.Double">
<f:selectItems var="entry" value="#{myVar.get(input1.value)}"/>
</h:selectOneMenu>
</p>
</h:form>
在myVar后面是一个定义如下的地图:Map<String, Collection<Double>>
第一个下拉菜单显示该地图的所有键的列表(如所需),但其背后的值是值的集合。 这里是该下拉列表的一个选项的HTML输出:
<option value="[1.0, 2.0]">SomeString</option>
我的第二个下拉列表应列出存储在键后面的地图中的双值集合,该值由第一个菜单选择。
现在的问题是,当我使用value="#{myVar.get(input1.value)}"
时,我从.value
得到的值是集合,而不是地图的字符串/键。所以我从来没有得到理想的结果。
如何获取绑定对象input1
后面的字符串/键?有input1.name
或.toString
之类的内容吗?在某个地方是纪录片吗?
答案 0 :(得分:0)
好的,我通过应用here的解决方案解决了这个问题。 必须将第一个下拉列表编辑为以下内容:
<p>
<h:outputText value="Output1: " />
<h:selectOneMenu value="#{myMappingsBean.data.attribute1}" binding="#{input1}" required="true">
<f:selectItems var="entry" value="#{myVar.entrySet()}" itemValue="#{entry.key}" itemLabel="#{entry.key}"/>
</h:selectOneMenu>
</p>
如您所见,条目集是从地图创建的,您可以使用该键作为值和标签。
有了它,input1.value
背后的价值现在不是双打的集合,而是地图的关键。