0

我有一个具有 BigDecimal 类型的属性“initialPrice”的“Trade”类。此属性可以有不同的小数,具体取决于另一个类“符号”中包含的属性“小数”,因此需要不同的格式,例如“#,###0.##”、“#,###0.### ##" 等。这对输出字段没有问题 - 我制作了一个 TagLib 来解决这个问题。

问题在于输入字段。默认值是 i 舍入 3 个小数,因此如果您使用超过 3 个小数,您将在更新时丢失这些。

我不知道如何或是否可以在这里使用我的 TagLib。我一直在尝试很多不同的方法,但都没有奏效。

这是我的标签库:

class PriceTagLib {
    def fmtPrice = {attrs, body->
        def BigDecimal number = attrs.number
        def int noOfDecimals = attrs.decimals
        switch (noOfDecimals) {
           case 1: out <<new DecimalFormat('###,##0.#').format(number)
            break
           case 2: out << new DecimalFormat('###,##0.##').format(number)
            break
           case 3: out << new DecimalFormat('###,##0.###').format(number)
            break
           case 4: out << new DecimalFormat('###,##0.####').format(number)
            break
           case 5: out << new DecimalFormat('###,##0.#####').format(number)
        }
    }
}  

这是我的课...

class Symbol {
    String          name            //The name of the symbol e.g. EURUSD, USDCAD etc.
    int             decimals

    static hasMany = [trades:Trade]

}


class Trade {
    static belongsTo = [symbol:Symbol, strategy:Strategy]
    static hasMany = [positions:Position]

    BigDecimal      initialPrice
    Symbol          symbol
    Strategy        strategy
    Position        positions

    static constraints = {
    type(inList:["Sell", "Buy"])
        initialPrice(scale:5)
        positions(nullable:true)
    }

}

这来自 show.gsp ,它可以按我的意愿工作:

<span class="property-value" aria-labelledby="initialPrice-label"><g:fmtPrice decimals="${tradeInstance.symbol.decimals}" number="${tradeInstance.initialPrice}"></g:fmtPrice></span>

这是我需要修改的行 - 即我需要在“值”参数的引号之间写的内容。也许我需要更换整条线?该行位于 _form.gsp 模板中。

<g:field name="initialPrice" value="${tradeInstance.initialPrice}" required=""/>

希望任何人都可以对此有所帮助。

提前致谢...

4

1 回答 1

1

您可以简单地在 value 属性中调用您的标签库:

<g:field name="initialPrice" value="${g.fmtPrice(decimals: tradeInstance.symbol.decimals, number: tradeInstance.initialPrice)}" required=""/>
于 2013-03-27T07:55:40.413 回答