Olá Carlos, desde já agradeço pela ajuda, encontrei uma solução bem prática e de certa forma fácil utilizando Scoped Service Proxy do Spring no grails, isso daria um tutorial muito bacana visto que muitos têm problemas relacionados ao que passei neste post (Alô Kico abre uma sessão "Tutoriais" ou "Recipes" aqui!), no final deste post tem o link onde encontrei o passo a passo para utilizar esse recurso, explicando BEM grosseiramente ele permite que eu crie uma variável "global" dentro de um controller de forma que eu possa armazenar nela, valores passados de uma view referente à sessão em que o usuário está, e esses valores persistem até que eu limpe essa variável, dando um "clean" quando o usuário voltar para a tela inicial por exemplo. O "global" que mencionei acima não é no sentido próprio da palavra, mas é pq ele permite que eu utilize essa variável em qualquer action dentro do controller em que ela for declarada. Pode ter ficado um pouco confuso a minha explicação, mas para entender melhor como é citado no link abaixo, um bom exemplo é o carrinho de compras em uma loja virtual, o usuário (logado ou não) pode adicionar um item no carrinho(vamos considerar que o carrinho seja a variável "global" que citei) e continuar navegando pelo site e continuar adicionando outros itens enquanto ele estiver naquela sessão, depois ele finaliza a compra e o carrinho(variável) é limpo, ou pode haver um método "clean" que limpa quando o cliente sai do site ou "desloga". Vlw!
Passo a passo: http://ldaley.com/post/436635056/scoped-services-proxies-in-grails
Particularmente não creio que o uso deste modelo deva ser para a sua necessidade. Veja o escopo session é em uma service, e não em uma controller, e neste ponto, criar uma varipavel global, já que cada sessão irá conter sua própria instancia da *Service, foge ao conceito de uma service não guardar estados, apenas processar algo e devolver o resultado. Seria uma quebra muito grande de paradigma se sua service soubesse quais checkbocks o usuário está anotando na camada de apresentação.
Vejo o responsável pelo tratamento do problema na camada de view (js) do que em seu backend.
O conceito do carrinho de compras é o de um basket (cesto) onde ele vai armazendo os dados, exemplificando de forma bem grosseira, isso geralmente é feito no objeto de sessão do usuário, com um Map de valores que representam aquele objeto de compra/aquisição. Toda vez que um usuário acessa uma página web java uma sessão é criada, isso é nativo da API de Servlets e não está atrelado ao ato de logar no sistema.
Espero que tenha lhe ajudado.
Att,