5

我正在努力用 JSF 实现一个相当微不足道的功能,其中涉及在页面上动态显示嵌套地图的内容并编辑其值的功能。但事实证明MappedValueExpression$Entry,您在迭代地图时得到的c:forEach是不可写的!

<c:forEach items='#{inflectionBean.word.inflectionalForms}' var="number" >
    <p:fieldset legend="#{number.key}">
        <c:forEach items="#{number.value}" var="case" >
            <p:panel header="#{case.key}">
                <h:inputText value="#{case.value}" />
            </p:panel>
        </c:forEach>
    </p:fieldset>
</c:forEach>

当我尝试提交上述表格时,我得到:

javax.el.PropertyNotWritableException: /inflection.xhtml @39,56 value="#{case.value}": 类 'com.sun.faces.facelets.tag.jstl.core.MappedValueExpression$Entry' 没有可写属性“值”。

我想知道是否有合理的解决方法,或者我是否以错误的方式解决问题。谢谢!

4

1 回答 1

9

基本上,您的代码正在尝试调用Map.Entry#setValue(value). 这在 EL 中确实是不可能的。相反,您应该通过键直接在地图本身上引用地图值,以便 EL 可以执行Map#put(key, value).

<c:forEach items="#{number.value}" var="case">
    ...
    <h:inputText value="#{number.value[case.key]}" />
于 2013-07-31T19:21:37.257 回答