在UIInput值中使用EL条件运算符时引发javax.el.PropertyNotWritableException [英] javax.el.PropertyNotWritableException when using EL conditional operator in value of UIInput

查看:0
本文介绍了在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}所示。

您使用(HTML5)占位符的方法实际上是错误的。为此,您应该使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆