gpt4 book ai didi

java - 执行 fn :length 时出现 PropertyNotWritableException

转载 作者:行者123 更新时间:2023-12-02 00:03:07 25 4
gpt4 key购买 nike

尝试将表的长度存储在JavaScript的隐藏输入中时,出现javax.el.PropertyNotWritableException:

Caused by: javax.el.PropertyNotWritableException: /view/ci/buttons.xhtml at line 34 and column 73 value="#{fn:length(order.phases)}": Illegal Syntax for Set Operation
at org.apache.myfaces.view.facelets.el.TagValueExpression.setValue(TagValueExpression.java:125)

JSF:

<h:inputHidden id="phasesCount" value="#{fn:length(order.phases)}"/>

我不明白这个错误,fn:length 支持只读操作,还是我遗漏了一些东西?

最佳答案

这种行为完全是预料之中的。 <h:inputHidden>也在表单提交时进行处理。这允许通过 JavaScript 对隐藏值进行其他操作。但是,EL 函数调用不是有效的 setter 方法操作。因此出现了这个异常(exception)。就像其他人一样 UIInput 组件,该值必须是一个完整的 bean 属性。

考虑到将变量传递给 JavaScript 的具体功能要求,<h:inputHidden>实际上是不适合这项工作的工具。只需让 JSF 将其打印为 JS 变量即可:

<script>var phasesCount = #{fn:length(order.phases)};</script>

或者,如果您确实需要一个隐藏的输入元素,即使它在服务器端没有完全使用,那么请使用纯 HTML 元素:

<input type="hidden" id="phasesCount" value="#{fn:length(order.phases)}" />

请注意,您也可以使用完全任意的 HTML 元素或属性来完成相同的工作:

<div id="phasesCount" data-phasesCount="#{fn:length(order.phases)}">

这个值也可以通过JS方式访问。

关于java - 执行 fn :length 时出现 PropertyNotWritableException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com