我正在使用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')
}
谢谢, - 戴夫
答案 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或行动真的没有被召唤。