我创建了一个Grails 3.1.1应用程序,它使用表单来加载带有数据的表。在本地运行,一切正常。但是,当部署到远程Tomcat时,提交表单会导致javax.servlet.ServletException
错误。
典型错误:
javax.servlet.ServletException: Could not resolve view with name 'stuckOrders' in servlet with name 'grailsDispatcherServlet'
片段:
<html>
<head>
<meta name="layout" content="main"/>
<asset:javascript src="application.js"/>
<title>LPP Order Fixer</title>
</head>
<body>
<div id="orders" style="float:left;width:70%;height:90%;">
<g:form name="stuckOrders" controller="lppOrderFixer" action="stuckOrders">
<label>Location: </label>
<input type="radio" id="locationReno" name="location" value="Reno"> Reno
<input type="radio" id="locationGalion" name="location" value="Galion"> Galion
<g:actionSubmit value="Locate Orders" action="stuckOrders"/>
LppOrderFixerController.groovy:
package lpporderfixer
class LppOrderFixerController {
def lppOrderFixerService
def location
def index() {}
def stuckOrders() {
location = Location.valueOf(params?.location)
List stuckOrdersList = lppOrderFixerService.fetchStuckOrders(location)
[stuckOrders:stuckOrdersList]
}
}
UrlMappings.groovy:
package lpporderfixer
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?(.$format)?"{
constraints {
// apply constraints here
}
}
"/"(view:"/lpporderfixer/stuckOrders")
"500"(view:'/error')
"404"(view:'/notFound')
}
}
项目视图布局:
我尝试在LppOrderFixerController.groovy中用[stuckOrders:stuckOrdersList]
替换render(view: 'stuckOrders', model:[stuckOrders:stuckOrdersList]
,似乎没有改变任何内容。
在本地,应用程序从http://localhost:8080/
开始。提交表单然后填充表格,URL更改为http://localhost:8080/lppOrderFixer/stuckOrders
。
在远程Tomcat上,应用程序不在根上下文中,因此它从http://<remotehost>:8080/lpporderfixer/
开始。提交表单会导致错误,位于网址http://<remotehost>:8080/lpporderfixer/lppOrderFixer/stuckOrders
。
我花了整整一天试图让这个工作起来,任何建议都会受到高度赞赏。提前谢谢!
答案 0 :(得分:0)
我怀疑这种情况很糟糕,因为GSP没有在您的war文件中编译和发送。
如果尚未
,请将其添加到build.gradle
文件中
apply plugin:'war'
apply plugin:'org.grails.grails-web'
apply plugin:"org.grails.grails-gsp"
寻找apply plugin:"org.grails.grails-gsp"
,你应该已经有了前两个。