【问题标题】:Decimal delimiter when viewing BigDecimal查看 BigDecimal 时的小数分隔符
【发布时间】:2017-01-30 11:21:34
【问题描述】:

我有一个包含 String 和 BigDecimal 类型字段的类。 当将 BigDecimal 显示为分隔符时,我想成为一个逗号。我更改了波兰语的编码,但仍然是点。 当我使用<f:convertNumber locale=""#{language.locale}"/> 时效果很好,但不想在每个领域都这样做,因为我有很多

实现这一目标的最佳方法是什么?

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.2"
              xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
    <application>
        <locale-config>
            <default-locale>pl</default-locale>
        </locale-config>
    </application>
</faces-config>

Language.java

@Named
@SessionScoped
public class Language implements Serializable {

    private Locale locale;

    @PostConstruct
    public void init() {
        locale = FacesContext.getCurrentInstance().getApplication().getDefaultLocale();
    }

    public Locale getLocale() {
        return locale;
    }

    public void setLocale(Locale locale) {
        this.locale = locale;
    }

}

view.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:fn="http://xmlns.jcp.org/jsp/jstl/functions">
    <f:view locale="#{language.locale}">
        <h:head>
            <f:facet name="first">
                <meta http-equiv="X-UA-Compatible" content="IE=edge" />
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
                <h:outputScript library="primefaces" name="jquery/jquery.js" />
            </f:facet>
            <f:facet name="middle">
                <h:outputStylesheet library="css" name="bootstrap.css" />
                <h:outputStylesheet library="css" name="default.css" />
                <h:outputScript name="js/bootstrap.js" />
            </f:facet>   
        </h:head>
        <h:body>
            <h:form id="menuForm">
                ...
                ...
                ...
                <h:outputText value="#{detail.1}" />    // string
                <h:outputText value="#{detail.2}" />    // bigdecimal
                ...
                ...
                ...
            </h:form>
        </h:body>
    </f:view>
</html>

【问题讨论】:

    标签: jsf jsf-2.2


    【解决方案1】:

    您需要以某种方式转换为您的语言环境

    当我使用&lt;f:convertNumber locale=""#{language.locale}"/&gt; 时效果很好,但不想在每个领域都这样做,因为我有很多

    因此,如果您不想在客户端执行此操作,则需要将 getLocaleNumber()(或类似)方法添加到您的 bean 以便获得所需格式的数字:

    public String getLocalized(BigDecimal number) throws Exception {
        // get desired locale (maybe a constant will suit you better)
        NumberFormat nf = NumberFormat.getInstance(new Locale("pl_PL"));
        return nf.format(number.doubleValue());
    }
    

    【讨论】:

    • @BalusC 实际上我没有在 google 中搜索这个答案,我只是给了 OP 我通常使用的解决方案,可能缺少舍入,但是 IMO 的制作方法如果您不想重复使用&lt;f:convertNumber&gt;,bean 中的格式化 getter 是正确的方法,如果没有,请添加您的方法,我相信您的方法会更好,但对不起,我不同意在黑暗中拍摄,如果错误是我缺乏 JSF 知识
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2016-12-08
    • 2011-04-21
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多