我正在使用一个外部lib,该lib具有许多类,它们的变量声明如下:
private String testBigDecimal;
public String getTestBigDecimal() {
return this.testBigDecimal;
}
public void setTestBigDecimal(BigDecimal testBigDecimal) {
this.testBigDecimal = BigDecimalValidador.validationXpto( testBigDecimal); //return String
}
注意,由于某些验证过程,setter()方法将收到一个BigDecimal值,并返回一个String值。当从服务器端调用这些命令时,一切正常! ...但是当使用适当的BigDecimalConverter从视图侧(JSF页面)调用时,出现此错误:
javax.faces.component.UpdateModelException:javax.el.PropertyNotWritableException:...属性[testBigDecimal]不能写在类型...上。
正确调用Converter后,代码仍然失败,因为它仍然期望使用setTestBigDecimal(Srting testBigDecimal)
metohd。
我的JSF页面:<h:inputText value="#{fooBean.testBigDecimal}" converter="bigDecimalConverter" />
有没有一种方法可以确保JSF可以调用已声明的setter(这是“非标准的方式”?在本地测试中,我将“ String testBigDecimal”类型更改为“ BigDecimal testBigDecimal”类型,并且一切正常,但是我无法更改Lib Source并扩展所有这些类将很痛苦。
任何人都可以帮忙吗?
您的获取器和设置器对不匹配。
首先,通过getter查找类型,在您的情况下为String
。然后,JSF(实际上是EL)将使用String
查找匹配的设置器。但这根本不存在。
您有2个选项:
BigDecimal
。String
。鉴于您显然想使用BigDecimalConverter
,那么选项1可能是最适合您的选择。