在UIInput值中使用EL条件运算符时引发javax.el.PropertyNotWritableException [英] javax.el.PropertyNotWritableException when using EL conditional operator in value of UIInput
本文介绍了在UIInput值中使用EL条件运算符时引发javax.el.PropertyNotWritableException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我收到此错误消息:
javax.el.PropertyNotWritableException: /u/editProfile.xhtml @64,140 value="#{empty userProfile.cfg.gpu or userProfile.cfg.gpu == '' ? usernavmsg.EditMe: userProfile.cfg.gpu}": null
问题是,当Bean属性的值为空时,inputText字段的值将从我的ManagedBean属性切换为资源字符串。所以我不能坚持这个价值。
我从我的托管Bean中的数据库中请求用户的配置文件。如果所述配置文件的属性为空,则inplace text holder值为"编辑我"。如果不为空,则为该属性的值。这招奏效了!但是,当我提交表单并尝试持久化一个新值或根本没有值时,出现错误。该错误仅出现在开始时为空的字段(当我从数据库请求它们时)。因此,问题在于当值为空时,它将从我的托管Bean属性切换为资源字符串。
我只有一张表格:
<h:outputLabel value="#{usernavmsg.GPU}: "/>
<p:inplace styleClass="lessDark">
<p:inputText value="#{empty userProfile.cfg.gpu ? usernavmsg.EditMe: userProfile.cfg.gpu}" />
</p:inplace>
当我提交表单时,我希望将userProfile.cfg保存在数据库中,但这不会发生。
我可以解决这个问题吗?这有可能吗?
推荐答案
EL中的条件语句确实不可写。它们是只读的。故事结束了。这同样适用于#{bean.property()}
中的EL中的方法引用。它必须是一个真值表达式,如#{bean.property}
所示。
placeholder
属性,而不是value
属性。在没有placeholder
属性的旧版本的PrimeFaces中,您将需要通过。
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<p:inputText value="#{userProfile.cfg.gpu}" a:placeholder="#{usernavmsg.EditMe}" ... />
现在PrimeFaces提供placeholder
属性。
<p:inputText value="#{userProfile.cfg.gpu}" placeholder="#{usernavmsg.EditMe}" ... />
这篇关于在UIInput值中使用EL条件运算符时引发javax.el.PropertyNotWritableException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文