使用 ui:repeat 在 Map 内部映射抛出 UpdateModelException
Map inside Map with ui:repeat throws UpdateModelException
有一个
Map<String,Map<Double,Double>> priceMatrix
我想在
中使用它
<ui:repeat value="#{calcModel.priceMatrix.keySet().toArray()}" var="x">
<div style="display: inline-block; margin-right: 10px">
<h:inputText value="#{x}" />
</div>
<ui:repeat value="#{calcModel.priceMatrix.get(x).keySet().toArray()}" var="y">
<div style="display: inline-block; margin-right: 10px">
<h:inputText value="#{y}" />
</div>
<div style="display: inline-block;">
<h:inputText value="#{calcModel.priceMatrix.get(x).get(y)}" />
</div>
<br />
</ui:repeat>
</ui:repeat>
如果我 post 公式,我会收到带有消息的 UpdateModelException:
value="#{calcModel.priceMatrix.get(x).get(y)}": Illegal Syntax for Set Operation
6 个多小时以来,这个问题让我很糟糕。我的第一个想法是在我的 bean 中提供自己的 getter 和 setter。这不起作用,因为 jsf 在调用 setter.
之前调用了 getter
我的问题有解决方案吗?
使用 List 会更好吗?
谢谢!
<h:inputText value="#{calcModel.priceMatrix.get(x).get(y)}" />
这确实不是一个可写的值表达式。这表示一个只读值表达式。 EL 无法弄清楚如何在其上调用 setter,因为 EL 表达式表示一连串的方法调用而不是嵌套属性。
您需要借助表示嵌套属性的大括号 []
将其替换为可写值表达式。
<h:inputText value="#{calcModel.priceMatrix[x][y]}" />
您的其他输入也不好看,value="#{x}"
肯定也是不可写的,但您现在可以找出正确的语法:只需使用 #{map[key]}
语法而不是#{key}
.
请注意,这并不是一个 JSF 问题。您可以在堆栈跟踪中进一步找到异常的根本原因是 javax.el.PropertyNotWritableException
。正如它的包 javax.el
所说,这是一个 EL 问题,而不是 JSF 问题。
有一个
Map<String,Map<Double,Double>> priceMatrix
我想在
中使用它<ui:repeat value="#{calcModel.priceMatrix.keySet().toArray()}" var="x">
<div style="display: inline-block; margin-right: 10px">
<h:inputText value="#{x}" />
</div>
<ui:repeat value="#{calcModel.priceMatrix.get(x).keySet().toArray()}" var="y">
<div style="display: inline-block; margin-right: 10px">
<h:inputText value="#{y}" />
</div>
<div style="display: inline-block;">
<h:inputText value="#{calcModel.priceMatrix.get(x).get(y)}" />
</div>
<br />
</ui:repeat>
</ui:repeat>
如果我 post 公式,我会收到带有消息的 UpdateModelException:
value="#{calcModel.priceMatrix.get(x).get(y)}": Illegal Syntax for Set Operation
6 个多小时以来,这个问题让我很糟糕。我的第一个想法是在我的 bean 中提供自己的 getter 和 setter。这不起作用,因为 jsf 在调用 setter.
之前调用了 getter我的问题有解决方案吗?
使用 List 会更好吗?
谢谢!
<h:inputText value="#{calcModel.priceMatrix.get(x).get(y)}" />
这确实不是一个可写的值表达式。这表示一个只读值表达式。 EL 无法弄清楚如何在其上调用 setter,因为 EL 表达式表示一连串的方法调用而不是嵌套属性。
您需要借助表示嵌套属性的大括号 []
将其替换为可写值表达式。
<h:inputText value="#{calcModel.priceMatrix[x][y]}" />
您的其他输入也不好看,value="#{x}"
肯定也是不可写的,但您现在可以找出正确的语法:只需使用 #{map[key]}
语法而不是#{key}
.
请注意,这并不是一个 JSF 问题。您可以在堆栈跟踪中进一步找到异常的根本原因是 javax.el.PropertyNotWritableException
。正如它的包 javax.el
所说,这是一个 EL 问题,而不是 JSF 问题。