`
shion
  • 浏览: 22268 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Grails的controller开发

 
阅读更多

1.建立Controller


①建立一个空的Controller,输入框里输入名称(系统自动在其名字后加上Controller)

②生成一个普通增删改的controller,不带GSP,输入框里输入domain的类全名

③生成增删改查的controller,带gsp,输入框里输入domain的类全名。

 

 

若选①,则生成出这样一个Controller:

 

package edu.ming

class TestCController {

    def index() { }
}

 

index是默认的方法,访问controller的格式如下:

/$controller/$action

 

$controller 是controller的名字,就是类短名里Controller之前的那那部分,如上例中,URL为 /TestC,首字母小写亦可,如 /testC,非首字母则区分大小写

 

$action 故名思意,是action,也就是里面的方法。上例中index的访问URL是 /TestC/index ,不过index是默认的方法,如果未指明会默认指向该方法,所以上述可简写为 : /TestC

 

当然你也可以更改默认访问的方法,在controller里加上一句代码即可,如,默认转到myhome方法:

 

 

static defaultAction = "myhome"
 

 

 

可以看到,建立controller以后在views目录里已经用controller的名称建立了一个文件夹,这里在里面建立一个GSP:


gsp的默认命名规则:只要和action的名称一样就默认转发。如我们新建一个index.gsp,上例中的controller的index方法执行完成后会转向这个gsp。

GSP代码:

 

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main"/>
<title>这是我的首页</title>
</head>
<body>
  <div class="body">
  我是一个首页
  </div>
</body>
</html>

 

注:以上是新建过程中选择使用gsp模板生成的。

 

启动app:

 


启动完成后访问:

http://localhost:8080/grailsTest/testC

 

可以看到结果


 

2.controller里常用的方法

获取GET或POST参数:

 

def name = params["name"]

获取request对象

 

def name = request["name"]

获取session对象

 

 def name = session["name"]

在其他方法里重定向到myhome方法

 

redirect(action:myhome)

直接转发对象到gsp(会将对象转换为map,转发到gsp上)

 

[person: new Person(name:"Jack")]

转发到指定gsp

 

def myhome() {
    def attributes = [person: new Person(name:"Jack")]
    render(view: "index", model: attributes)
}
 

 

render是个很有用的方法,如果你想做一个web接口,不需要gsp,可以直接这样

 

 

def myhome() {
    render "a,b,c"
}
 

 

其他强大的用法不细细列举了。

 

 

3.GSP和view

gsp和jsp感觉上差不多,都是html+动态语言+EL表达式+标签库

 

一个带脚本的gsp:

 

<!doctype html>
<html>
	<head>
		<title>Grails</title>
	</head>
	<body>
		<% out << "我是用Groovy写出来的" %>
	</body>
</html>

 

 

和jsp一样写在<%和%>之间,当然不推荐用这种方式,有可能的话还是尽量用标签库和el表达式。

 

来试一下模板的用法。

 

在刚刚views的testC目录,建一个模板文件,模板文件需要下划线开头。建一个_houseView.gsp,内容如下:

 

 

<div>
   <div>名字: ${house?.name}</div>
   <div>类型: ${house?.type}</div>
</div>
 

 

 

 

在TestController里加些代码,让它往gsp里转发些数据:

 

package edu.ming

import test.domain.House;

class TestCController {
    def index() { 
		[house:new House(name:"Jack's Home",type:"common")]	
	}
}

 

 

在index.gsp里引入模板:

 

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="layout" content="main"/>
<title>这是我的首页</title>
</head>
<body>
  <div class="body">
  我是一个首页
  <g:render template="houseView" model="[house: house]" />
  </div>
</body>
</html>

 

 

运行,结果:


模板的用法感觉跟标签库差不多,不过可以在gsp里写html标签还是比在groovy代码里写html感觉要来得直接,更舒服一些。

 

这个方法把模板文件放在了controller的目录里面。如果想全局重用的话可以规划一个目录,如views/tmpl/_houseView.gsp

 

index.gsp在引用模板之前加一句:

 

 

<g:render template="/tmpl/houseView" />

 

 

然后再来看一下页面组织,grails采用了sitemesh框架。

 

其实应该有感觉,看一下现在testC里的index.gsp,里面没写header和footer,但是已经默认被加上了。注意这句:

 

<meta name="layout" content="main"/>

这句意思是说,使用main这个layout。这个layout在views/layouts里面,可以找到 main.gsp ,打开看到如下内容:

 

 

<!doctype html>
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]>    <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]>    <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]>    <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"><!--<![endif]-->
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
		<title><g:layoutTitle default="Grails"/></title>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="shortcut icon" href="${resource(dir: 'images', file: 'favicon.ico')}" type="image/x-icon">
		<link rel="apple-touch-icon" href="${resource(dir: 'images', file: 'apple-touch-icon.png')}">
		<link rel="apple-touch-icon" sizes="114x114" href="${resource(dir: 'images', file: 'apple-touch-icon-retina.png')}">
		<link rel="stylesheet" href="${resource(dir: 'css', file: 'main.css')}" type="text/css">
		<link rel="stylesheet" href="${resource(dir: 'css', file: 'mobile.css')}" type="text/css">
		<g:layoutHead/>
        <r:layoutResources />
	</head>
	<body>
		<div id="grailsLogo" role="banner"><a href="http://grails.org"><img src="${resource(dir: 'images', file: 'grails_logo.png')}" alt="Grails"/></a></div>
		<g:layoutBody/>
		<div class="footer" role="contentinfo"></div>
		<div id="spinner" class="spinner" style="display:none;"><g:message code="spinner.alt" default="Loading&hellip;"/></div>
		<g:javascript library="application"/>
        <r:layoutResources />
	</body>
</html>

 

 

看到body里面有刚刚看到的header和footer的定义。那么这个 <g:layoutBody/> 就是testC/index.gsp的body内容,<g:layoutTitle default="Grails"/> 自然就是标题的定义,如果没定义他默认就是Grails,<g:layoutHead/> 这个就是index.gsp的head了。通过修改这个文件可以更改全局的样式。

 

  • 大小: 58.6 KB
  • 大小: 43.7 KB
  • 大小: 39 KB
  • 大小: 15.6 KB
  • 大小: 12.9 KB
分享到:
评论

相关推荐

    Grails_开发简介

    Grails_开发简介,本文介绍如何使用Oracle JDeveloper 作为IDE 来开发Grails 应用程序。此外,您还在学习开发Grails 应用程序的过程中大概了解Groovy 的一些概念。

    grails快速开发web

    grails快速开发web.pdf

    grails 开发框架-1

    grails1.0开发框架1 类似于ruby on rails的框架。

    grails开发环境配置及应用开发

    详细讲解grails开发环境配置。 详细讲解grails连接mysql数据库,crud开发

    grails 开发框架-4

    grails1.0开发框架4 类似于ruby on rails的框架。

    使用Grails快速开发Web应用

    Grails开发Web应用的入门建立兴趣的最佳教程。

    Grails 3开发邮件发送功能

    Grails 3开发邮件发送功能,完整教程!超级实用,手把手教你接入邮件发送

    grails敏捷开发

    grails的安装,创建grails的应用程序,包括验证,数据库,控制器,groovy服务器页面,安全,插件、服务及部署的作者scott davis ,jason rudolph

    grails 开发文档 合辑

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008 grails_programming Grails1.1中文文档-----2009.3.25 Grails入门指南(第二版) Groovy经典入门 Programming Groovy 2 合集,超实惠哦

    grails 开发框架-5

    grails1.0开发框架5 类似于ruby on rails的框架。

    Grails企业web应用开发与部署.pdf

    Grails企业web应用开发与部署.pdf 很好的资源

    grails 开发框架-3

    grails1.0开发框架3 类似于ruby on rails的框架。

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

    Grails入门好资料

    Grails 3.X开发实战

    grails开发实践,欢迎下载使用 grails开发实践,欢迎下载使用 grails开发实践,欢迎下载使用

    grails开发

    grails开发关于grails入门指南的例子进行分析

    Grails技术精解与Web开发实践.part2

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。 我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails技术精解与Web开发实践.part1

    自己买的书,然后用扫描机扫描的,整个文件太大了,不能一次性上传上来,所以拆成3个part。...我自己学grails很想看这本书,结果网上没有,就自己去买了,然后共享给需要的人。 如果有什么问题请联系我下架。

    Grails+快速开发+Web+应用程序.pdf

    本教程介绍 Grails,这是一个搭建在动态语言 Groovy ...使用 Grails 可以提高 Web 开发的效率,降低 Web 开发的复杂度。本文 从 Grails 自动生成代码入手,以示例为中心逐步增加深度与难度,对 Grails 开发进 行演示。

    关于Grails开发的软件部署建议

    关于Grails开发的软件部署建议

    Grails Wed开发课程设计

    Grails构建在开源技术如Spring、Hibernate和SiteMesh之上,提供了一个类似于Rails的平台可以与Java平台无缝集成的。但Grails比Rails具有更强的可像Java那样成熟的虚拟机,并且能够给企业级的服务提供成熟的支持。...

Global site tag (gtag.js) - Google Analytics