2

每当我们使用 inputtext 作为十进制值时,我们都会这样做:

<h:inputText id="valMin" tabindex="4" required="false"
    maxlength="10" styleClass="valorMinimoMaximo"
    value="#{actionGeneralidadeUnidadeCalculo.valorMinimoTransiente}"
    size="10" label="ValorMinimo">
</h:inputText>

字符串在哪里valorMinimoTransiente,当它执行操作时,我将其转换为BigDecimal.

我这样做是因为我们的十进制数字有逗号,而不是点,并且当您尝试转换类似

4,56

BigDecimal它给出了一个例外。

那么,有没有办法在BigDecimal没有整个过程的情况下获得价值?

顺便说一句,我正在运行 jsf 1.2 和 richfaces 3.3.3。

4

1 回答 1

2

哎呀!听起来您被迫在旧的应用服务器上使用 JSF 1.2,例如 WebSphere Application Server v6.1。

您可以使用标准的 BigDecimalConverter:

<f:converter converterId="javax.faces.BigDecimal" />

但是,您可能会发现该转换器受到限制,具体取决于您的需要。如果是这样,那么最好编写自己的自定义转换器。

因此,请继续阅读以了解如何创建自己的转换器类。

创建您的转换器类:

import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter("bigDecimalConverter")
public class BigDecimalConverter implements Converter {
    ...override and implement the required interface methods here
}

要使用您的自定义转换器,您可以使用:

<h:inputText value="#{someBean.field}" converter="bigDecimalConverter"/>

或者:

<h:inputText value="#{someBean.field}">
    <f:converter converterId="bigDecimalConverter"/>
</h:inputText>

我已经很长时间没有使用 JSF 1.2,但是注释有可能是 JSF 2.0 约定。如果是这样,您必须以老式方式注册自定义转换器:faces-config.xml:

<converter>
    <description>
        Some description here (optional)
    </description>
    <converter-id>bigDecimalConverter</converter-id>
    <converter-class>
        com.companyname.project.converters.BigDecimalConverter
    </converter-class>
</converter>

参考:

Java EE 5 BigDecimalConverter

注册自定义转换器

Java EE 5 标准转换器

于 2015-03-19T20:34:06.920 回答