Grails: Не могу понять, почему я получаю 404 - PullRequest
0 голосов
/ 29 июня 2011

Я использую Grails 1.3.6. У меня есть этот файл ...

Grails-приложение / просмотров / Главная / Дизайн / index.gsp

Вот что определено в моем HomeController. К сожалению, всякий раз, когда я посещаю, "http://localhost:port/context-path/design/", я получаю ошибку 404. Сервер запускается нормально, и в журналах нет ошибок. Что я могу сделать, чтобы получить мою страницу вместо 404?

def index = {
    def folder = params.folder;
    def page = params.page;

    if (page) { 
        try { 
            def contents = IOService.getFileContents(folder, page)  
            response.setContentType("application/json")
            response << contents
        } catch (FileNotFoundException e) { 
            response.status = 404;
        }   // try
    } else { 
        render(view: "/home/${folder}/index") 
    }   // if
}

Мой файл URLMappings состоит из ...

static mappings = {
    "/$folder?/$page"{
        controller = "home"
        action = "index"
    }

    "/"(view:"/index")
    "500"(view:'/error')
}

Спасибо, - Дейв

Ответы [ 2 ]

6 голосов
/ 29 июня 2011

Если вы хотите получить доступ к

/context-path/home/design

Ваше действие должно быть названо дизайном, т.е.

class HomeController {
    def design = {

    }
}

Соглашение Грааля всегда /context-path/controllerName/actionName (если оно не отображается по-другому в grails-app/conf/URLMappings.groovy).

В вашем примере немного неясно, по какому пути вы пытаетесь получить доступ. Для решения обоих:

  • Если вы хотите /context-path/design, вам нужен DesignController с действием index (потому что если в URL не указано действие, Grails ищет действие index).
  • Если вы хотите /context-path/home/design, вам нужно HomeController с действием design.

Редактировать

В комментариях вы выражаете желание иметь возможность /context-path/design отображать действие индекса HomeController. Вы можете сделать это с помощью grails-app/conf/URLMappings.groovy:

"/design"(controller: 'home', action: 'index')
1 голос
/ 30 июня 2011

Поскольку кажется, что у вас есть два разных действия, я бы настроил их немного по-другому:

def indexWithPage = {
    def folder = params.folder;
    def page = params.page;

    try { 
        def contents = IOService.getFileContents(folder, page)  
        response.setContentType("application/json")
        response << contents
    } catch (FileNotFoundException e) {
        e.printStackTrace(); 
        response.status = 404;
    }   // try
}

def index
    def folder = params.folder;

    render(view: "/home/${folder}/index") 
}

с URLMaping:

static mappings = {
    "/$folder/$page"{
        controller = "home"
        action = "indexWithPage"
    }

    "/$folder"{
        controller = "home"
        action = "index"
    }

    "/"(view:"/index")
    "500"(view:'/error')
}

Я также бросил e.printStackTrace ();там, чтобы помочь нам определить, получаете ли вы ВАШ 404 или действие действительно не вызывается.

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