Primefaces 布尔复选框的集合操作语法非法?

Moh*_*s M 0 jsf el primefaces

下面的 EL 值表达式是否有效?

<p:selectBooleanCheckbox value="#{!bean.isCreateGroup}" id="checkBoxCreateSecurityGrpKey">
Run Code Online (Sandbox Code Playgroud)

我收到的错误是

javax.el.PropertyNotWritableException:/pages/popup.xhtml @503,170 value="#{!bean.isCreateGroup}": Illegal Syntax for Set Operation
Run Code Online (Sandbox Code Playgroud)

per*_*ssf 6

该表达式value="#{!bean.isCreateGroup}"在此无效,因为SelectBooleanCheckBox的 value 属性必须是既可以获取也可以设置值(左值表达式)的javax.el.ValueExpression 。

来自 ValueExpression 的链接 Javadoc:

并非所有右值表达式都可以用作左值表达式(例如“${1+1}”或“${firstName} ${lastName}”)

表达式语言规范 2.1 中:

左值的有效语法是右值有效语法的子集。特别是,左值只能由单个变量(例如 ${name})或某个对象上的属性解析组成,通过 . 或 [] 运算符(例如 ${employee.name})。

为了使其更加清晰,表达式应该代表一个 bean 属性:

<p:selectBooleanCheckbox value="#{bean.aBooleanProperty}" ... />    
Run Code Online (Sandbox Code Playgroud)

对于您的情况,最简单的解决方案是在您的 bean 中使用另一个具有相反值的布尔变量,例如Boolean notCreateGroup(顺便说一句,为什么引用的组件checkBoxCreateSecurityGrpKey应该具有与名为 的变量相反的值createGroup?)。

硒也:

在 h:inputText 值和 h:commandButton actionListener 中使用条件运算符