XPages:从managedBean读取私有属性失败

Lot*_*ler 1 java managed-bean xpages xpages-ssjs

在Xpage中,我需要计算多个checkBox控件的禁用属性.所以我为此构建了一个javaBean并将其注册为managedBean.原则上它就像一个魅力:一个computedField控件的value属性使用EL绑定到bean的一个私有变量:

value="#{myBean.myTestValue}"
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,它显示了正确的内容.

接下来,我将checkBox的disabled属性绑定到我的bean中计算的私有布尔变量,再次使用EL:

disabled="#{myBean.isCheckBoxDisabled}"
Run Code Online (Sandbox Code Playgroud)

不幸的是,这次javax.faces.el.PropertyNotFoundException抛出了.

作为一种解决方法,我创建了一个getter方法,然后我从checkBox的disabled属性调用,这次作为JS代码:

disabled="#{javascript:myBean.isCheckBoxDisabled()}
Run Code Online (Sandbox Code Playgroud)

这是按预期工作,已设置disabled属性.这对我来说基本没问题虽然我本来喜欢用EL做这件事,因为这似乎是最佳实践.

问题是:为什么控件的value属性可以使用bean的私有变量而disabled属性不能?

Knu*_*ann 5

它应该合作

disabled="#{myBean.checkBoxDisabled}"
Run Code Online (Sandbox Code Playgroud)

对于getter和 setter,EL将其"转换"为
myBean.getCheckBoxDisabled()
myBean.isCheckBoxDisabled()(如果是boolean或Boolean属性).

myBean.setCheckBoxDisabled(value)

如果要从当前包之外的EL,JavaScript或Java类访问那些属性,则应始终为私有属性生成公共getter和setter.