Primefaces布尔CheckBox的集合操作的非法语法?

时间:2017-02-14 13:01:08

标签: jsf primefaces el

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

<p:selectBooleanCheckbox value="#{!bean.isCreateGroup}" id="checkBoxCreateSecurityGrpKey">

我收到错误

javax.el.PropertyNotWritableException:/pages/popup.xhtml @503,170 value="#{!bean.isCreateGroup}": Illegal Syntax for Set Operation

1 个答案:

答案 0 :(得分:3)

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

来自ValueExpression的链接Javadoc:

  

并非所有的r值表达式都可以用作l值表达式(例如&#34; $ {1 + 1}&#34;或&#34; $ {firstName} $ {lastName}&#34; )

从表达语言规范2.1:

  

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

为了清楚起见,表达式应该代表一个bean属性:

<p:selectBooleanCheckbox value="#{bean.aBooleanProperty}" ... />    

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

Se还:

Using conditional operator in h:inputText value and h:commandButton actionListener