控制器在那里,但在grails中显示“找不到错误代码404页面”

时间:2013-07-24 10:22:31

标签: grails

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

5 个答案:

答案 0 :(得分:1)

发布的代码中存在一些问题会导致您出现问题:

  1. 您使用$params而不是params访问参数。只有在GString时才需要$字符。例如def foo = "your username is ${params.userName}"

  2. 您的视图名为new.gsp,但您的操作名为index。默认情况下,Grails将在为控制器命名的目录中查找与操作名称匹配的视图。换句话说,因为您没有明确告诉它/new.gsp grails会查找/new/index.gsp。您可以将视图重命名为/new/index.gsp,也可以告诉grails在索引操作中呈现视图new

  3. 尝试渲染登录页面时,您正在调用render(view: 'login.gsp')。调用render标记时不需要gsp扩展名。您打算使用grails视图名称,而不是文件名。 render(view: 'login')

  4. 如果您使用的是最新版本的grails(&gt; 2.0),那么您应该使用控制器方法而不是闭包。例如与def actionName() { }相同的def actionName() = { }。原因在于grails文档。

  5. 以下是所有问题的解决方案:

    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