Sunday, September 30, 2007

Grails (0.6) Gotchas...

  • Multi-select dropdown box with size attribute doesn't work as expected

  • Though the documentation select tag in GSP tablibrary doesn't explicitely say anything about multiple select, it works by passing additional parameters ( multiple="multiple" size="4").

    <g:select name="" from="${StockPurchase.list()}" optionkey="id" multiple="multiple" size="4"></g:select>

    However, the result will produce a multi select drop-down but the size attribute is not honored. The bug lies in css. Open main.css under web-app/css and edit the following line and remove select,:

    input, select, textarea {

  • many-to-many stores relations in wrong columns

  • e.g.
    Problem domain
    A stock is sold that was purchased multiple times (in fractions).
    A stock is sold multiple times (in fractions) that was purchased in whole once.

    Domain Classes

    class StockPurchase {
    static belongsTo = [StockSale]
    static hasMany = [stockSales:StockSale]

    class StockSale {
    static hasMany = [stockPurchases:StockPurchase]


    class StockSaleController {
    //code omitted for brevity
    def save = {
    def stockSale = new StockSale() = params

    def stockPurchases = params.''
    stockPurchases.each {

    if( {
    flash.message = "StockSale ${} created."
    else {

    In addition to stock_sale and stock_purchase tables, it also craetes a reference table named stock_sale_stock_purchase (with columns stock_sales_id, stock_purchases_id) automatically to support many-to-many relationship.

    However, when a stock sale is saved, the reference table ends up with ids switched. But the application works correctly as expected.

    I initially thought there could be a bug. But looks like there isn't and it is expected to work that way.

    Check for an explanation by Graeme Rocher here

No comments:

Post a Comment