new.gsp:
<html>
<head>
</head>
<body>
<g:form name="myForm" controller="New" action="index" params="username:username">
<div>
<fieldset class="form">
<label for="name">Name:</label>
<div>
<g:textField name="username" value="${params.userName}"/>
</div>
</fieldset>
</div>
<g:submitButton name="Submit" value="Submit" />
</g:form>
</body>
<html>
NewController.groovy:
package sample
import com.sun.org.apache.bcel.internal.generic.NEW;
class NewController {
def index = {
if($params.userName){
render(view:"/login.gsp")
}
}
}
login.gsp是一个简单的页面,有一个简单的欢迎说明。
如果有人解决方案请回复,
提前谢谢。 通过prasanth答案 0 :(得分:1)
发布的代码中存在一些问题会导致您出现问题:
您使用$params
而不是params
访问参数。只有在GString
时才需要$字符。例如def foo = "your username is ${params.userName}"
您的视图名为new.gsp
,但您的操作名为index
。默认情况下,Grails将在为控制器命名的目录中查找与操作名称匹配的视图。换句话说,因为您没有明确告诉它/new.gsp
grails会查找/new/index.gsp
。您可以将视图重命名为/new/index.gsp
,也可以告诉grails在索引操作中呈现视图new
。
尝试渲染登录页面时,您正在调用render(view: 'login.gsp')
。调用render标记时不需要gsp扩展名。您打算使用grails视图名称,而不是文件名。 render(view: 'login')
如果您使用的是最新版本的grails(&gt; 2.0),那么您应该使用控制器方法而不是闭包。例如与def actionName() { }
相同的def actionName() = { }
。原因在于grails文档。
以下是所有问题的解决方案:
将new.gsp
重命名为/new/index.gsp
。将login.gsp
重命名为/new/loggedIn.gsp
。
控制器:
class NewController {
def index() {
if (params.userName) {
forward action: 'loggedIn'
return // render and forward don't end flow control
}
}
def loggedIn() {} // no logic, automatically renders '/new/loggedIn.gsp'
}
答案 1 :(得分:1)
将您的控制器名称更改为“new”而不是New in 它会起作用。
或者您可以在控制器中修改“保存”操作,这样当您单击“保存”按钮时,将呈现新页面。
答案 2 :(得分:0)
在控制器中添加名为login的处理程序。
def login = {}
答案 3 :(得分:0)
如果视图文件为new.gsp
,那么您需要将您的操作设为new
,或者使用网址映射(在UrlMappings.groovy
中)执行以下操作:
"/new" {
controller = 'new'
action = 'new'
}
或可以设置
static defaultAction = 'new'
...在NewController
。
然后Grails将在您的控制器上找到适当的操作。
答案 4 :(得分:0)
如果您的操作被称为索引,则可以访问
页面localhost:8080/webapp/NewController