Как заставить ссылку работать из списка элементов в таблице - PullRequest
0 голосов
/ 13 марта 2012

Я хочу сделать ссылку с этой страницы, перейти на страницу с подробной информацией, но я получаю ошибку 404.

    Here is the gsp:
<%@ page import="tictoc.Store" %>
    <!doctype html>
    <html>
        <head>
            <meta name="layout" content="main">
            <g:set var="entityName" value="${message(code: 'store.label', default: 'Store')}" />
            <title><g:message code="default.show.label" args="[entityName]" /></title>
        </head>
        <body>

            <h1> Ticket Store </h1>
            <div>
                <table border=0 class="eventsTable">
                    <tr>

                        <th>Event</th>
                        <th>Start </th>
                        <th>End </th>
                        <th>Description</th>
                    </tr>

                    <g:each var="event" in="${events}">

                    <tr>
                        <td><g:link action="display" controller="store" id="${event.id}">
                            ${event.name}
                            </g:link>
                        </td>
                        <td><g:formatDate format="MM/dd/yyyy" date="${event.startDate}"/></td>
                        <td><g:formatDate format="MM/dd/yyyy" date="${event.endDate}"/></td>
                        <td>${event.desc}</td>
                    </tr>

                    </g:each>

                </table>

            </div>
            <div class="paginateButtons">
                <g:paginate controller="store"
                    action="show"
                    max="5"
                    params="[name:active]"
                    total="${totalEvents}" />
            </div>
        </body>
    </html>

Это контроллер, и у меня есть GSP с именем buy.gsp, который никогда не получаетпоказано на рисунке.

        package tictoc</p>

<pre><code>    import tictoc.Event 

    class StoreController {

        Event event
        static defaultAction = "activeEvents"

        def show = {
            log.error 'exec activeEvents'
            activeEvents()
        }

        def activeEvents = {
            log.error 'exec activeEvents'
            params.max = Math.min(params.int('max', 5), 100);
            params.offset = params.int('offset', 0)
            params.total  =  Event.count()
            params.sort   = params.sort ?: "name";
            params.order  = params.order ?: "asc";

            //  def max    = Math.min(params.int('max', 5), 100);
            //  def offset = params.offset?.toInteger() ?: 0
            //  def total =  Event.count()
            def eventList = Event.list(max: params.max, offset: params.offset)

            return [events:eventList, 
                    totalEvents:params.total,
                    active:params.active]                  
        }

        def detail = {
            log.error 'exec detail'
            def eventId = params.id
            log.error 'eventId:' + eventId
            render(view: "buy", model: [event: eventId])
        }

        def list = {
            params.max = Math.min(params.int('max', 25), 100);
            params.offset = params.int('offset', 0)
            params.sort = params.sort ?: "name";
            params.order = params.order ?: "asc";
            return [ myList: DomainObject.list(params) ]
        }


        def display = {
            println "display..........."
            def event = Event.findById(params.id)
            if(event) {
                println "EVENT IS $event"
                render(view:"buy", model:[event:event])
            }
            else {
                response.sendError 404
            }
        }
    }
</code>

Вот отображение URL:

class UrlMappings { static mappings = { "/"(controller:"store", action:'show') } }

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

У вас нет сопоставления для URL /store/display/6, потому что вы сопоставили только один указанный контроллер и указанное действие для точного URL, с помощью:

mappings = { "/"(controller:"store", action:'show') } 

Если вам нужно отобразить диплей, вы должны вернуть (возможно, удаленное) отображение:

class UrlMappings {

    static mappings = {
        "/$controller/$action?/$id?"{
             constraints {
                // apply constraints here
             }
        }
        "/"(controller:"store", action:'show') 
    }
}

Подробнее об отображении URL можно узнать по адресу http://grails.org/doc/latest/guide/theWebLayer.html#urlmappings

0 голосов
/ 14 марта 2012

Вы также можете предоставить более конкретное отображение, как это:

class UrlMappings {

    static mappings = {
        "/displayEvent/$id"(controller: 'store', action: 'display')
        "/"(controller:"store", action:'show') 
    }
}
0 голосов
/ 13 марта 2012

Можете ли вы попробовать изменить Event.findById(params.id) на Event.get(params.id)

Кажется, ваше событие пустое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...