Grails:无法弄清楚为什么我会得到404

时间:2011-06-29 13:22:34

标签: grails

我正在使用Grails 1.3.6。我有这个档案......

的grails-app /视图/家庭/设计/ 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 个答案:

答案 0 :(得分:6)

如果您希望能够访问

/context-path/home/design

您的行动需要命名为设计,即

class HomeController {
    def design = {

    }
}

Grails惯例始终为/context-path/controllerName/actionName(除非您在grails-app/conf/URLMappings.groovy中对其进行了不同的映射)。

您的示例有点不清楚您尝试访问的路径。要解决这两个问题:

  • 如果您需要/context-path/design,则需要DesignController进行index操作(因为如果网址中未提供任何操作,Grails会查找index操作)
  • 如果您需要/context-path/home/design,则需要HomeController design行动。

修改

在评论中,您表示希望能够将/context-path/design映射到HomeController索引操作。您可以使用grails-app/conf/URLMappings.groovy

执行此操作
"/design"(controller: 'home', action: 'index')

答案 1 :(得分:1)

由于看起来你有两个截然不同的行动,我的设定方式会有所不同:

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或行动真的没有被召唤。