代码之家  ›  专栏  ›  技术社区  ›  Simon

如何更改GRAILS GSP fieldValue格式化整数的方式?

  •  5
  • Simon  · 技术社区  · 16 年前

    我的域对象中有一个字段,我将其定义为整数。。。

    Integer minPrice
    

    然后,我在普惠制页面中访问它,如下所示:

    ${fieldValue(bean: myBean, field: 'minPrice')}
    

    我在HTML中得到的是。。。

    100,000
    

    我的选择控件如下所示。。。

    <g:select name="minPrice" 
    value="${fieldValue(bean: personInstance, field: 'minPrice')}"  
    onchange="setDirty()"
    noSelection='${['0':'Select a number...']}'
    from="${[
        ['name':'100,000', 'id':100000],
        ['name':'200,000', 'id':200000],
        ['name':'300,000', 'id':300000]
        ]}"
    optionKey="id" optionValue="name"
    />
    

    当我从SELECT字段中获取值并将其发送回服务器时,它正确地有一个整数值,我将保留该整数值。但是,返回行程从不预先选择下拉列表中的右行,因为该值是以逗号分隔的字符串。

    医生说

    编辑: 根据下面的答案,我已经尝试了一些更进一步的事情,到目前为止,结果相当令人失望。。。

    如果我把 <gformatNumber/> <g:select/>

    <g:select name="minPrice" 
    value='<g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />'
    onchange="setDirty()"
    noSelection='${['0':'Select a number...']}'
    from="${[
    ['name':'100,000', 'id':100000],
    ['name':'200,000', 'id':200000],
    ['name':'300,000', 'id':300000],
    ]}"
    optionKey="id" optionValue="name"
    />
    

    在我的整数值100000上使用GSP的数字格式标记,就像这样。。。

    var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
    

    给予 100 . 记住 fieldValue 100,000 ,所以这并不奇怪。

    如果我像这样使用jsp标记库。。。

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    var y = <fmt:formatNumber value="${fieldValue(bean: personInstance, field: 'minPrice')}" pattern=".00"/>;
    

    Cannot format given Object as a Number .

    有人有进一步的想法吗?

    8 回复  |  直到 16 年前
        1
  •  8
  •   Stéphane Bruckert jungledev    11 年前

    要显示原始号码吗?比如10万?

    您可以直接获取字段:

    ${myBean.minPrice}
    
        2
  •  5
  •   Brandon    16 年前

    一种是使用JSTL标记库,如 docs

    另一种更酷的方法是使用grails中包含的“formatNumber”标记,也可以在 docs .

    出于您的目的,该标记的使用可能如下所示:

    <g:formatNumber number="${fieldValue(bean: myBean, field: 'minPrice')}" format="######" />
    
        3
  •  3
  •   Kalisen    15 年前

    将“groupingUsed”属性与您的格式结合使用:

    <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" 
                    format="#" 
                    groupingUsed="true" />
    
        4
  •  3
  •   Victor Sergienko    14 年前

    更好的使用 custom PropertyEditor formatNumber 每次输出值时标记。

    myOwnCustomEditorRegistrar(CustomEditorRegistrar)
    

    创建您的类:

    class CustomEditorRegistrar implements PropertyEditorRegistrar {
        void registerCustomEditors(PropertyEditorRegistry registry) {
            registry.registerCustomEditor(BigDecimal.class, new MyBigDecimalEditor(BigDecimal.class))
        }
    }
    
        5
  •  1
  •   Torgny    15 年前

    改变

    var x = <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}" format="#" />;
    

    var x = <g:formatNumber number="${personInstance.minPrice}" format="#" />;
    
        6
  •  1
  •   Chris    14 年前

    我发现处理这个问题的最好方法就是按照Victor Sergienko(顺便说一句)暗示的那样使用PropertyEditor。

    为Integer创建一个编辑器,放入src/groovy:

    class IntegerEditor extends PropertyEditorSupport {
        void setAsText(String s) {
            if (s) value = s as Integer
        }
    
        public String getAsText() {
            value
        }
    }
    

    并使用PropertyEditorRegistrar(也在src/groovy中)注册它:

    class MyEditorRegistrar implements PropertyEditorRegistrar {
        public void registerCustomEditors(PropertyEditorRegistry reg) {
            reg.registerCustomEditor(Integer, new IntegerEditor())
        }
    }
    

    beans = {
        customEditorRegistrar(MyEditorRegistrar)
    }
    

        7
  •  0
  •   Simon    16 年前

    我没有试图将字符串化的数字解析回整数,而是将其保留为格式化的字符串,以供选择。这意味着我必须改变我的 from 值如下:

    <g:select name="minPrice" 
    value="${fieldValue(bean: personInstance, field: 'minPrice')}"  
    onchange="setDirty()"
    noSelection='${['0':'Select a number...']}'
    from="${[
        ['name':'100,000', 'id':'100,000'],
        ['name':'200,000', 'id':'200,000'],
        ['name':'300,000', 'id':'300,000']
        ]}"
    optionKey="id" optionValue="name"
    />
    

    当然,当我发回服务器时,发送的值是“100000”作为转义字符串。我意识到Grails、Spring、Hibernate或堆栈中的其他东西会在持久化之前将字符串共同转换回正确的整数类型。

        8
  •  0
  •   R.V.RaguPrashanth    12 年前
    Use like this :
    <g:formatNumber number="${fieldValue(bean: personInstance, field: 'minPrice')}"
     format="#.##"/>;