在jsf上将inputtext值转换为大小数

时间:2015-02-19 13:03:17

标签: jsf converters

每当我们使用输入文本作为十进制值时,我们会这样做:

<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。

1 个答案:

答案 0 :(得分:1)

糟糕!听起来你被迫在旧的应用服务器上使用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

Registering a Custom Converter

Java EE 5 Standard Converters