`
hh792000
  • 浏览: 17503 次
  • 性别: Icon_minigender_1
  • 来自: 通渭
社区版块
存档分类

Grails 实现简单登录

阅读更多
折腾了一上午,终于用Grails实现了一个最最简单,没有任何校验的登录功能。虽然慢,但也挺开心的,记录一下。
域类:
class User {

    static constraints = {
    }
    
    String username ;
    String password ;
    
}

控制器:
class UserController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index() {
        redirect(action: "login", params: params)
    }
    
    def login = {
       
    }
    
    def loginCheck = {
        def user = User.findByUsernameAndPassword(params.username, params.password)
        if(user){
            session.user = user
            flash.message = "Hello ${user.username}!"
            redirect(action:"success")      
        }else{
            flash.message = "Sorry, ${params.username}. Please try again."
            redirect(action:"login")
        }
    }
    
    def success ={

    }

    def list() {
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [userInstanceList: User.list(params), userInstanceTotal: User.count()]
    }

    def create() {
        [userInstance: new User(params)]
    }

    def save() {
        def userInstance = new User(params)
        if (!userInstance.save(flush: true)) {
            render(view: "create", model: [userInstance: userInstance])
            return
        }

        flash.message = message(code: 'default.created.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])
        redirect(action: "show", id: userInstance.id)
    }

    def show() {
        def userInstance = User.get(params.id)
        if (!userInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "list")
            return
        }

        [userInstance: userInstance]
    }

    def edit() {
        def userInstance = User.get(params.id)
        if (!userInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "list")
            return
        }

        [userInstance: userInstance]
    }

    def update() {
        def userInstance = User.get(params.id)
        if (!userInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "list")
            return
        }

        if (params.version) {
            def version = params.version.toLong()
            if (userInstance.version > version) {
                userInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
                    [message(code: 'user.label', default: 'User')] as Object[],
                          "Another user has updated this User while you were editing")
                render(view: "edit", model: [userInstance: userInstance])
                return
            }
        }

        userInstance.properties = params

        if (!userInstance.save(flush: true)) {
            render(view: "edit", model: [userInstance: userInstance])
            return
        }

        flash.message = message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), userInstance.id])
        redirect(action: "show", id: userInstance.id)
    }

    def delete() {
        def userInstance = User.get(params.id)
        if (!userInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "list")
            return
        }

        try {
            userInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "list")
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'user.label', default: 'User'), params.id])
            redirect(action: "show", id: params.id)
        }
    }
}

登录页面:
<%@ page contentType="text/html;charset=UTF-8" %>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用户登录</title>
  </head>
  <body>
  <g:if test="${flash.message}">
    <div class="message">${flash.message}</div>
  </g:if>
  <form action="loginCheck" method="post">
    <table>
      <tr>
        <td>用户名</td>
        <td>
          <input type="text" name="username"/>
        </td>
      </tr>
      <tr>
        <td>密码</td>
        <td>
          <input type="password" name="password"/>
        </td>
      </tr>
        <td>
          <input type="submit" value="提交"/>
        </td>
    </table>
  </form>
</body>
</html>

成功页面:
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录成功</title>
  </head>
  <body>
    <h1>
      <g:if test="${flash.message}">
      <div class="message">
        ${flash.message}
      </div>
    </g:if>
    </h1>
</body>
</html>


所有东西都是最简单的
分享到:
评论

相关推荐

    使用 Grails 快速开发 Web 应用程序

    在了解了Grails的基本结构后,可以通过创建简单的控制器和领域类来实现基本功能。例如,创建一个用于联系人管理的控制器和领域类,处理CRUD操作。Grails的自动化工具如GORM(Grails Object-Relational Mapping)将...

    Grails登陆实例

    本文档将详细介绍如何在Grails框架下构建一个简单的登录系统。此示例不仅展示了基础的登录功能,还包括了密码加密等安全特性。通过本教程,读者可以了解到如何从零开始搭建一个支持用户认证的应用。 #### 二、环境...

    Grails结合uploadify上传文件的简单代码

    在本文中,我们将深入探讨如何在Grails框架中结合uploadify插件实现文件上传功能。Grails是一款基于Groovy语言的、高效的Web应用开发框架,它简化了Java平台上的开发流程。uploadify则是一个JavaScript库,它允许...

    grails-用户手册

    GORM是Grails的持久化框架,它实现了Hibernate和ActiveRecord的功能,使得与数据库的交互变得简单。通过定义领域类,你可以轻松地完成CRUD(创建、读取、更新、删除)操作。 五、Grails插件系统 Grails的插件系统...

    grails ajax

    Grails 是一个基于Groovy语言的开源Web应用框架,它构建在Spring Boot之上,提供了丰富的功能和便捷的...无论是简单的数据获取还是复杂的业务流程,Grails都能提供强大的支持,让Ajax在Grails应用中发挥出应有的价值。

    第一个grails程序

    总的来说,"第一个grails程序"是一个基础的登录验证系统,展示了Grails如何快速构建Web应用,包括处理用户请求、与数据库交互、实现业务逻辑和视图渲染。这个简单的例子对于初学者来说,是理解Grails框架工作原理和...

    grails中文入门简介

    Grails的国际化支持非常好,开发者可以通过简单的配置来为不同的语言环境定制应用程序。 在服务层,Grails支持声明式事务,并允许通过依赖注入将服务集成到应用程序中。服务的作用域和生命周期是Grails服务管理的一...

    Grails中文参考手册

    Grails 提供了对多语言环境的支持,通过 properties 文件管理不同语言的文本资源,便于实现应用程序的国际化。 **Grails 文档** "Grails 中文参考手册" 是一套详细的 Grails 学习资料,涵盖了框架的所有核心组件、...

    Grails入门指南 -- 针对grails1.0.4更新

    - **用户认证**:实现用户登录、权限验证等功能,保障应用的安全性。 - **数据加密**:确保敏感数据的安全传输与存储。 - **测试**: - **单元测试**:针对单一组件进行测试,验证其功能正确性。 - **功能测试**...

    Grails 中文参考手册

    Grails是一个基于Groovy语言的开源Web应用框架,它提供了高效的开发环境和强大的功能,使得构建动态网站和企业级应用变得简单高效。 1. **起步**: - **下载安装Grails**:首先,你需要从官方渠道下载最新版本的...

    Grails权威指南 中文版

    Grails的独特之处在于它能够吸收其他流行框架的优点,比如Spring的依赖注入、Hibernate的对象关系映射能力、Quartz的强大调度功能以及SiteMesh的布局管理,而这一切都可以在Grails的简单约定和简洁语法下实现。...

    grails 配置mongodb数据库

    在本文中,我们将深入探讨如何在Grails框架中配置MongoDB...通过这样的配置和实现,我们就能在Grails中搭建一个简单的用户登录系统,并利用MongoDB存储用户信息。这个系统能够自动生成相应的集合数据,方便快速开发。

    grails中文参考手册

    - **Hello World示例**:在新创建的应用中,你可以通过创建一个简单的控制器和视图来实现经典的“Hello, World!”程序,体验Grails的快速开发能力。 3. **使用IDE** Grails支持多种集成开发环境(IDE),如...

    Grails基础教程.pdf

    - **自动数据库移植**:Grails支持自动数据库迁移,通过简单的配置即可实现数据库结构的更新。 **3.2 日志配置** 合理的日志记录对于追踪问题、调试代码至关重要。 **3.3 数据源** - **数据源和环境**:不同环境...

    Grails案例

    本案例"Grails案例"旨在展示如何利用Grails实现基本的增删查改(Create, Read, Update, Delete,简称CRUD)功能,这对于任何数据库驱动的应用来说都是核心需求。 1. **Grails简介** - Groovy语言:Grails是基于...

    Grails从入门指南(第二版)

    3. **第一个Grails应用**:通过创建一个简单的“Hello, World!”应用,体验Grails的快速开发流程,理解Grails脚手架和自动代码生成。 4. **Grails MVC**:深入理解Model-View-Controller架构,包括Domain Classes...

    grails开发

    例如,`spring-security-core`插件用于安全控制,`grails-spring-websocket`插件实现WebSocket支持等。 6. **命令行工具** Grails的命令行工具提供了丰富的命令,如创建新项目、生成领域类、运行测试等,极大提高...

    Grails企业web应用开发与部署

    它提供了丰富的插件系统,使得企业级Web应用的开发变得快速而简单。本篇文章将深入探讨Grails在企业Web开发中的应用以及部署策略。 一、Grails简介 Grails是一种模型-视图-控制器(MVC)框架,其设计理念是“约定...

Global site tag (gtag.js) - Google Analytics