2013-03-27 61 views
0

我有一個類「Trade」,其類型爲BigDecimal的屬性「initialPrice」。這個屬性可以有 具有不同的小數,這取決於另一個類「Symbol」中包含的屬性「小數」,因此需要不同的格式,例如「#,### 0。##」,「#,### 0。#####」等 輸出字段沒有問題 - 我用TagLib來解決這個問題。在Grails中輸入字段的動態格式(小數)

問題出在輸入字段。默認的是我有三位小數的舍入,所以如果你使用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=""/> 

希望任何人都可以傳播一些光在這個幫助。

感謝的提前...

回答

0

你可以簡單地調用值屬性中的標記庫:

<g:field name="initialPrice" value="${g.fmtPrice(decimals: tradeInstance.symbol.decimals, number: tradeInstance.initialPrice)}" required=""/> 
+0

感謝的是工作。我是新來的,至少對網絡開發非常沒有經驗,所以我沒有意識到我應該用g來替換g:。當從值字符串中調用時。你知道,我已經嘗試過你的解決方案,並且失敗的原因是「g:」 – larand 2013-03-27 09:27:34