如何使用或自定义javax.faces.convert.BigDecimalConverter

基什·普拉卡什(Kishor Prakash)

我有一个在我的JSF应用程序中使用BigDecimal类型的要求
所以我使用BigDecimal Converter进行如下转换:

<h:inputText value="#{priceManager.price}">
    <f:converter converterId="javax.faces.BigDecimal"/>
</h:inputText>

这很好。
除了这种转换,我还想限制

  • 值必须介于-9999到9999之间。并且
  • 小数点后仅2个数字。

显然f:converter没有灵活f:convertNumber
那么如何实现以上目标呢?
如果需要覆盖默认的Converter,我会做的,但是我从来没有做过。
请给我一些建议。

Mojarra版本-2.1

莱斯特

我不知道让转换器进行验证是否是一种好习惯,但这是我所看到的最干净的方法。这个转换器对我来说很好用:

package teststuff;

import java.math.BigDecimal;
import java.math.RoundingMode;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import org.apache.commons.lang3.math.NumberUtils;

@FacesConverter("bigDecimalConverter")
public class BigDecimalConverter implements Converter {

    private static final BigDecimal UPPER_LIMIT = new BigDecimal(9999);
    private static final BigDecimal LOWER_LIMIT = new BigDecimal(-9999);

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        if (!NumberUtils.isNumber(value)) {
            throw new ConverterException(new FacesMessage("not a number"));
        }
        if (value.contains(".")) {
            String decimalPlace = value.substring(value.indexOf("."));
        if (decimalPlace.length() > 3) { // 3 as decimal point is included in the String
                throw new ConverterException(new FacesMessage(
                        "too many numbers after decimal point"));
            }
        }
        BigDecimal convertedValue = new BigDecimal(value).setScale(2,
                RoundingMode.HALF_UP);
        if (convertedValue.compareTo(UPPER_LIMIT) > 0) {
            throw new ConverterException(new FacesMessage(
                    "value may not be greater than " + UPPER_LIMIT));
        }
        if (convertedValue.compareTo(LOWER_LIMIT) < 0) {
            throw new ConverterException(new FacesMessage(
                    "value may not be less than " + LOWER_LIMIT));
        }
        return convertedValue;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        return ((BigDecimal) value).toString();
    }
}

我只是这样使用它:

<h:form>
       <h:inputText value="#{priceManager.price}" converter="bigDecimalConverter"/>
       <h:messages/>
       <h:commandButton value="submit"/>
    </h:form>

感谢您对此的任何反馈。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

javax.faces.convert.ConverterException:无法理解为货币值

来自分类Dev

在p:dataTable过滤器中显式使用隐式JSF转换器javax.faces.convert.EnumConverter

来自分类Dev

具有在CSS中定义的自定义字体的Java Server Faces

来自分类Dev

如何处理找不到javax.faces.resource资源

来自分类Dev

如何配置faces-config.xml

来自分类Dev

如何使用JDK8在Eclipse中导入javax.faces库?

来自分类Dev

如何使用JDK8在Eclipse中导入javax.faces库?

来自分类Dev

自定义类型Convert.ToString

来自分类Dev

javax.faces.FacesException:无法为结果解析NavigationCase

来自分类Dev

找不到工厂javax.faces.context.FacesContextFactory Weblogic的备份

来自分类Dev

java.lang.NoClassDefFoundError:javax / faces / context / FacesContextFactory

来自分类Dev

Websphere异常:找不到工厂:javax.faces.context.FacesContextFactory

来自分类Dev

java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

来自分类Dev

javax.faces.FacesException:找不到catpcha的公钥

来自分类Dev

java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

来自分类Dev

找不到工厂javax.faces.context.FacesContextFactory Weblogic的备份

来自分类Dev

javax.faces.context.FacesContextFactory。试图找到备份

来自分类Dev

JSF 2.3启动中未定义的组件类型javax.faces.ViewRoot

来自分类Dev

com.sun.faces> jsf-impl和org.glassfish> javax.faces(2.2.4)的差异/相等

来自分类Dev

枚举faces-config.xml中定义的资源包

来自分类Dev

枚举faces-config.xml中定义的资源包

来自分类Dev

如何在WildFly上安装JSF 2.3(javax.faces.jar)的一个jar变体

来自分类Dev

如何在Java Server Faces 2中维护对象列表

来自分类Dev

如何流式下载文件并显示JSF Faces消息?

来自分类Dev

如何从Java类访问Faces配置的导航用例

来自分类Dev

如何在Java Server Faces中处理引导方式?

来自分类Dev

如何在Java Server Faces中处理引导程序模式?

来自分类Dev

流星:使用MyFonts中的@ font-faces让Safari立即崩溃

来自分类Dev

使用JSF Faces Flow代替常规导航系统的优势

Related 相关文章

  1. 1

    javax.faces.convert.ConverterException:无法理解为货币值

  2. 2

    在p:dataTable过滤器中显式使用隐式JSF转换器javax.faces.convert.EnumConverter

  3. 3

    具有在CSS中定义的自定义字体的Java Server Faces

  4. 4

    如何处理找不到javax.faces.resource资源

  5. 5

    如何配置faces-config.xml

  6. 6

    如何使用JDK8在Eclipse中导入javax.faces库?

  7. 7

    如何使用JDK8在Eclipse中导入javax.faces库?

  8. 8

    自定义类型Convert.ToString

  9. 9

    javax.faces.FacesException:无法为结果解析NavigationCase

  10. 10

    找不到工厂javax.faces.context.FacesContextFactory Weblogic的备份

  11. 11

    java.lang.NoClassDefFoundError:javax / faces / context / FacesContextFactory

  12. 12

    Websphere异常:找不到工厂:javax.faces.context.FacesContextFactory

  13. 13

    java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

  14. 14

    javax.faces.FacesException:找不到catpcha的公钥

  15. 15

    java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

  16. 16

    找不到工厂javax.faces.context.FacesContextFactory Weblogic的备份

  17. 17

    javax.faces.context.FacesContextFactory。试图找到备份

  18. 18

    JSF 2.3启动中未定义的组件类型javax.faces.ViewRoot

  19. 19

    com.sun.faces> jsf-impl和org.glassfish> javax.faces(2.2.4)的差异/相等

  20. 20

    枚举faces-config.xml中定义的资源包

  21. 21

    枚举faces-config.xml中定义的资源包

  22. 22

    如何在WildFly上安装JSF 2.3(javax.faces.jar)的一个jar变体

  23. 23

    如何在Java Server Faces 2中维护对象列表

  24. 24

    如何流式下载文件并显示JSF Faces消息?

  25. 25

    如何从Java类访问Faces配置的导航用例

  26. 26

    如何在Java Server Faces中处理引导方式?

  27. 27

    如何在Java Server Faces中处理引导程序模式?

  28. 28

    流星:使用MyFonts中的@ font-faces让Safari立即崩溃

  29. 29

    使用JSF Faces Flow代替常规导航系统的优势

热门标签

归档