获取绑定对象

时间:2017-05-03 15:53:19

标签: jsf

我有以下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之类的内容吗?在某个地方是纪录片吗?

1 个答案:

答案 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背后的价值现在不是双打的集合,而是地图的关键。