grails形式的操作不起作用

grails形式的操作不起作用,grails,Grails,我正在尝试创建一个简单的帐户,当单击“创建”按钮时,它应该执行“创建”操作,但我得到一个错误,即 HTTP状态404-“/WEB-INF/grails app/views/users/create.gsp”未找到。 这是我的索引代码块。gsp <!-- CREATEFORM --> <div id="id02" class="modal"> <g:form class="modal-content animate" controller="users" acti

我正在尝试创建一个简单的帐户,当单击“创建”按钮时,它应该执行“创建”操作,但我得到一个错误,即
HTTP状态404-“/WEB-INF/grails app/views/users/create.gsp”未找到。

这是我的索引代码块。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>
这里是错误


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

简而言之:如果您没有明确指定要呈现的内容,grails将尝试查找视图以显示操作执行的结果,如下所示:

grails-app/views/<controllerName>/<actionName>.gsp
这将导致“白色屏幕”的左上角出现“Hello world!”文本

另一个选项是在常规位置创建一个gsp视图,名为grails app/views/.gsp-如果没有指定render方法调用,它将在操作执行后自动呈现(如您给出的示例中所示)

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

def myAction() {
    ...
    [param1key: param1value, param2key: param2value, ...]
}
渲染gsp视图时将考虑模型


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

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

简而言之:如果您没有明确指定要呈现的内容,grails将尝试查找视图以显示操作执行的结果,如下所示:

grails-app/views/<controllerName>/<actionName>.gsp
这将导致“白色屏幕”的左上角出现“Hello world!”文本

另一个选项是在常规位置创建一个gsp视图,名为grails app/views/.gsp-如果没有指定render方法调用,它将在操作执行后自动呈现(如您给出的示例中所示)

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

def myAction() {
    ...
    [param1key: param1value, param2key: param2value, ...]
}
渲染gsp视图时将考虑模型

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

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

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

${flash.message}
检查下面的代码更改,它将
用户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'
        }

    }
}
并将以下代码添加到您的
索引.gsp

${flash.message}
有很多方法可以重定向到页面。您可以使用渲染、重定向、链、转发等

请查看grails以了解更多信息

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

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

${flash.message}
检查下面的代码更改,它将
用户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'
        }

    }
}
并将以下代码添加到您的
索引.gsp

${flash.message}
有很多方法可以重定向到页面。您可以使用渲染、重定向、链、转发等

请查看grails以了解更多信息

在grails for action(非gsp)中,您需要向客户端呈现一些内容, 否则,它将执行该操作中的所有内容,但返回404 GSP未找到响应,如果没有渲染/重定向语句,它将该动作视为GSP,但实际上不是GSP,因此它响应404。 您可以呈现一些数据,如list/JSON或简单字符串,如下所示

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

}
在Grails for action(非gsp)中,您需要向客户端呈现一些内容, 否则,它将执行该操作中的所有内容,但返回404 GSP未找到响应,如果没有渲染/重定向语句,它将该动作视为GSP,但实际上不是GSP,因此它响应404。 您可以呈现一些数据,如list/JSON或简单字符串,如下所示

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

}

我正在使用2.4.4,我可以问一下如何指定要渲染的内容吗?@MagatLaw更新了答案。上面的信息也与grails 2.4.4相关。我正在使用2.4.4,我可以问一下如何指定渲染内容吗?@MagatLaw,更新了答案。上面的信息也与Grails2.4.4相关。添加
而不是'Create',添加
而不是'Create'`