2013-03-27 2 views
0

У меня есть класс «Торговля» со свойством «initialPrice» типа BigDecimal. Это свойство может иметь разные десятичные числа в зависимости от свойства «десятичные знаки», содержащиеся в другом классе «Символ», и для этого нужны разные форматы, например. «#, ### 0. ##", "#, ### 0. #####" и т. Д. Это не проблема с выходными полями - я создал TagLib для решения этой проблемы.Динамическое формирование (десятичных знаков) полей ввода в Grails

Проблема с полем ввода. По умолчанию это i раундов с 3 десятичными знаками, поэтому, если вы используете более 3 decmals, вы потеряете их при обновлении.

Я не знаю, как и возможно ли использовать мой TagLib здесь. Я пробовал много разных способов, но никто не работал.

Это мой 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> 

Вот строка Мне нужно изменить - то есть то, что мне нужно написать между кавычками для «значения» -параметра. Maybee Мне нужно заменить всю линию? Строка находится в шаблоне _form.gsp.

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

Надеюсь, что кто-то может распространить свет на это, чтобы помочь.

Спасибо заранее-х ...

ответ

0

вы можете просто вызвать ваш тег LIB в пределах значения атрибута:

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

Спасибо о том, что работал. Я новичок, по крайней мере, очень неопытный в webdevelopment, поэтому я не понял, что должен заменить g: g. при вызове из строки значений. Знаете, я уже пробовал ваше решение и провалил причину "g:" – larand

Смежные вопросы