Fustigador
Fustigador

Reputation: 6469

Open the same webpage, but with another content

Im developing a webapp that is feeded via a server. Its index presents some shops deals, having all of these deals ann id. In the .gsp, i have this code:

<div id="content">
<g:each in='${promos}' var='promo'>
<div id="up_box"></div>
<div class="deal_container">
    <div class="images_container"><img src="${createLink(action:'showImage',controller:'image',id:promo.fotoPrincipal.id)}" width="120" height="105" />

    </div>

    <g:link controller='promotion' action='openPromo' params="[promoid:promo.id]">

   <div class="oferta">${promo.name}</div>
   </g:link>
    <g:link controller='promotion' action='openPromo' params="[promoid:promo.id]">
    <div class="flecha">
     </div>
    </g:link>


</div>

That means, when I click in one of the links, it will open an url like this:

app/promotion/openPromo/3

In case the deal with the id "3" is clicked. I have a "general" deal details page. I want that page to load always, and fulfill its details dinamically, depending the deal the user clicked. How can I do that?

I don't know if I have been clear in my explanation, if i haven't please ask.

Thank you!

Upvotes: 0

Views: 109

Answers (3)

Fustigador
Fustigador

Reputation: 6469

I did it this way, after asking my workmate:

def openPromo() {
    Promotion promo = Promotion.get(params.promoid)
    [promo:promo]
}

Almost what you said David, but without rendering, if I name openPromo my gsp.

Thank you!

Upvotes: 0

David Genn
David Genn

Reputation: 709

Both links will be handled by the openPromo action in the PromotionController and will be passed the id of the promo as promoid.

You can then load the appropriate promo along with any other related offers you want the user to see and give these to the view. Eg:

class PromotionController {

  def openPromo() {
    Promo promo = Promo.get(params.promoid)

    // Load any other relevant data or offers

   render (view:'openPromo', model:[promo:promo, <any other model data here>]
  }
}

You can then use the model data in your gsp.

Upvotes: 1

reixa
reixa

Reputation: 7011

You can do it adding that general info to a Template and then render it from the Controller like this

// render a template to the response for the specified model
def theShining = new Book(title: 'The Shining', author: 'Stephen King')
render(template: "book", model: [book: theShining])

You´ve got more info about the render in this link from the Grails documentation.

http://grails.org/doc/latest/ref/Controllers/render.html

It´s easy to do it, you can add a createLink like the first ones whith calls to an action who will render that template.

Hope it helps ;) and good luck!

Upvotes: 0

Related Questions