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

Java XPages:从managedBean读取私有属性失败,java,xpages,managed-bean,xpages-ssjs,Java,Xpages,Managed Bean,Xpages Ssjs,在Xpage中,我需要计算多个复选框控件的禁用属性。因此,我为此构建了一个javaBean,并将其注册为managedBean。原则上,这就像一个符咒:computedField控件的值属性使用EL绑定到bean的一个私有变量: value="#{myBean.myTestValue}" 正如所料,它显示了正确的内容 接下来,我将复选框的disabled属性绑定到bean中计算的私有布尔变量,再次使用EL: disabled="#{myBean.isCheckBoxDisabled}" 不幸

在Xpage中,我需要计算多个复选框控件的禁用属性。因此,我为此构建了一个javaBean,并将其注册为managedBean。原则上,这就像一个符咒:computedField控件的
属性使用EL绑定到bean的一个私有变量:

value="#{myBean.myTestValue}"
正如所料,它显示了正确的内容

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

disabled="#{myBean.isCheckBoxDisabled}"
不幸的是,这次抛出了一个
javax.faces.el.PropertyNotFoundException

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

disabled="#{javascript:myBean.isCheckBoxDisabled()}
这正按预期工作,已设置disabled属性。这对我来说基本上没问题,尽管我很想用EL来做这件事,因为这似乎是最佳实践

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

它应该与

disabled="#{myBean.checkBoxDisabled}"
EL将此“翻译”为
myBean.getCheckBoxDisabled()

myBean.isCheckBoxDisabled()
(如果是布尔或布尔属性)
对于getter和
myBean.setCheckBoxDisabled(值)

给塞特

如果您想从当前包之外的EL、JavaScript或Java类访问私有属性,则应该始终为私有属性生成公共getter和setter。

它应该与

disabled="#{myBean.checkBoxDisabled}"
EL将此“翻译”为
myBean.getCheckBoxDisabled()

myBean.isCheckBoxDisabled()
(如果是布尔或布尔属性)
对于getter和
myBean.setCheckBoxDisabled(值)

给塞特


如果您想从当前包之外的EL、JavaScript或Java类访问私有属性,您应该始终为私有属性生成公共getter和setter。

Hm,事实上我有公共getter(以“is…”形式),但没有适当的公共setter,只有我的类构造函数调用的私有初始化方法。所以你说我应该包括公共setter仅仅是为了它?不,你只需要一个公共getter用于禁用属性。因此,在您的示例中,您将定义一个属性
private boolean checkBoxDisabled
并具有getter
公共布尔值isCheckBoxDisabled()
。请确保您完全使用这种区分大小写的方法。啊,好吧,我明白我的错误了:我的私人道具是“isCheckBoxDisabled”,而getter的名称完全相同。我明天会试试这个(这么多要学的东西,这么少的大脑…)。当然你是雷特,这就成功了。非常感谢!嗯,事实上我有公共getter(以“is…”的形式),但没有合适的公共setter,只有我的类构造函数调用的私有初始化方法。所以你说我应该包括公共setter仅仅是为了它?不,你只需要一个公共getter用于禁用属性。因此,在您的示例中,您将定义一个属性
private boolean checkBoxDisabled
并具有getter
公共布尔值isCheckBoxDisabled()
。请确保您完全使用这种区分大小写的方法。啊,好吧,我明白我的错误了:我的私人道具是“isCheckBoxDisabled”,而getter的名称完全相同。我明天会试试这个(这么多要学的东西,这么少的大脑…)。当然你是雷特,这就成功了。非常感谢!