以grails形式执行的操作无效

时间:2018-04-16 06:49:31

标签: grails

我正在努力创建一个简单的帐户创建,当点击创建按钮时,它应该执行“创建”操作,但是我得到一个错误,说明了这个 HTTP状态404 - 找不到“/WEB-INF/grails-app/views/users/create.gsp”。

这是index.gsp的代码块

<!-- CREATEFORM -->
<div id="id02" class="modal">
  <g:form class="modal-content animate" controller="users" action="create">
    <div class="imgcontainer">
      <span onclick="document.getElementById('id02').style.display='none'" class="close" title="Close Modal">&times;</span>
        <div class="container" style="text-align:center">
            <b><h style="font-family: Arial, Helvetica, sans-serif; font-size: 30px">CREATE AN ACCOUNT</h></b><br/>
      <input type="text" placeholder="Enter Username" name="uname" required/>

      <input type="password" placeholder="Enter Password" name="psw" required/>

      <input type="text" placeholder="First Name" name="firstName" required/>

      <input type="text" placeholder="Last Name" name="lastName" required/>

      <input type="text" placeholder="Age" name="age" required/>
      <br/>
      <input type="date" placeholder="Birth Date" name="birthdate" required/>
      <br/>
      <input type="text" placeholder="Student Number" name="studno" required/><br/>

      <label>
        <input type="checkbox" checked="checked" name="remember"> Remember me</input>
      </label>
      <br/>
      <button type="submit" style="width: 100px; margin-right:10px;" >Create</input>
      <button type="button" onclick="document.getElementById('id02').style.display='none'" class="cancelbtn">Cancel</button>

    </div>
    </div>
  </g:form>
</div>

以下是usersController的代码块。

class usersController {    
    def index(){}
    def create()
    {
        new Users(userid:params.uname,password:params.psw).save()
        new UserInfo(studentno:params.studno,age:params.age,birth_date:params.birthdate,first_name:params.firstName,last_name:params.lastName,user_id:params.uname).save()
    }
}

这是错误

Error Page

3 个答案:

答案 0 :(得分:2)

  

HTTP状态404 - 找不到“/WEB-INF/grails-app/views/users/create.gsp”。

因为您使用创建操作保存数据,但保存数据后没有重定向选项或create.gsp可用。因此Grails首先会查看是否有可用的重定向选项并尝试重定向create.gsp

检查以下代码更改,这会将user id保存到userInfo表并重定向到索引页

所以改变你的usersController

class usersController {
    def index() {}

    def create() {
        def user = new Users(userid: params.uname, password: params.psw).save()
        def userInfo = new UserInfo(studentno: params.studno, age: params.age, birth_date: params.birthdate, first_name: params.firstName, last_name: params.lastName, user_id: user.id).save()
        if (user && userInfo) {
            flash.message = "User created successfully"
            redirect action: 'index'
        } else {
            flash.message = "Problem in user creation"
            redirect action: 'index'
        }

    }
}

并在您的index.gsp

中添加以下代码
${flash.message}

有很多方法可以重定向到网页。您可以使用渲染,重定向,链,转发..etc

请查看grails documentation了解更多信息

答案 1 :(得分:0)

首先,你使用什么grails版本?如果是最新的(3.3.4),那么此link可能会有所帮助。

简短地说:如果你没有明确指定要呈现的内容 - grails会尝试查找视图以显示执行操作的结果:

grails-app/views/<controllerName>/<actionName>.gsp

看起来你没有。

<强> UPD

有几种方法可以在grails控制器中呈现动作的输出。 将显式内容定义为:

def myAction() {
    ...
    render "Hello World!"
}

这将导致&#34;白色屏幕&#34;用&#34; Hello world!&#34;左上角的文字。

另一种选择是在传统位置创建一个gsp视图grails-app / views //。gsp - 如果没有指定 render 方法调用,它将在动作执行后自动呈现(如在你给出的样本中

第三个选项是指定模型图:

def myAction() {
    ...
    [param1key: param1value, param2key: param2value, ...]
}

渲染gsp视图时会考虑模型。

请阅读我提供链接的文档。它非常有用。

答案 2 :(得分:0)

在Grails for action(非gsp)中,你需要渲染某些东西给客户, 否则它会执行该操作中的所有内容,但返回404 gsp not found响应,如果没有render / redirection语句,则认为该操作为gsp但实际上并不是gsp,因此它会响应404.

您可以按如下方式呈现像list / JSON或简单字符串这样的数据。

def create() {
 //your business logic is here
 render "operation performed successfully"

}