从JSF页调用设置方法,该方法使用与变量本身不同的参数声明

问题描述 投票:0回答:1

我正在使用一个外部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并扩展所有这些类将很痛苦。

任何人都可以帮忙吗?

jsf el setter converters
1个回答
0
投票

您的获取器和设置器对不匹配。

首先,通过getter查找类型,在您的情况下为String。然后,JSF(实际上是EL)将使用String查找匹配的设置器。但这根本不存在。

您有2个选项:

  1. 更改getter以返回BigDecimal
  2. 或者,更改设置器以接受String

鉴于您显然想使用BigDecimalConverter,那么选项1可能是最适合您的选择。

© www.soinside.com 2019 - 2024. All rights reserved.