- 浏览: 160573 次
- 性别:
- 来自: 杭州
文章列表
既然Grails已经提供了大量<g:>标签,那么你也应该不会对可以创建自已怕标签感惊讶。可能让你感到意外的是创建它非常容易。
1.创建自定义标签
命令行输入grails create-tag-lib Footer,它会在grails-app/taglib目录下创建一个FooterTagLib.groovy空模板,它也会创建相应的测试类。
class FooterTagLib {
def thisYear={
out<<new Date().format('yyyy')
}
}
这就是创建一个新的<g:thisYear/>标签的全部工作,仅仅只是 ...
在index.gsp页面会发现<head>部分中的<meta>标签
<head>
<title>Welcome to Grails</title>
//告诉你有一个名为main.gsp的模板在grails-app/views/layouts目录下
<meta name="layout" content="main" />
</head>
注:Grails用到了一个流行的模板库,叫做SiteMesh,就是把两个GSP给拼接到一起 ...
用PDMReader导成word
- 博客分类:
- PDMReader
在工具栏找到导入数据字典->从PowerDesigner保存的pdm字典文件导入(*.pdm)
会在左侧生成节点-右键->导出->word
关于PowerDesigner的使用可以在我收藏中找到
对grails的内置数据库,刚开始接触会很奇怪,为什么每次启动服务器,创建的数据都没有了。
原因:
1.grails内置的数据库是hsqldb
2.查看grails-app/conf/DataSource.groovy文件
dataSource { //数据源的公共部分
pooled = true
driverClassName = "org.hsqldb.jdbcDriver"
username = "sa"
password = ""
}
hibernate {
cache. ...
领域类:
1.Race.groovy
package com.rt
class Race {
String name
Date startDate
String city
String state
BigDecimal distance
BigDecimal cost
Integer maxRunners=100000
static hasMany=[registrations:Registration]
static constraints = {
name(blank:false,maxSize:50)
star ...
在test/integration目录中,建一个集成测试类
代码如下:
package com.rt
import groovy.util.GroovyTestCase;
class RaceIntegrationTests extends GroovyTestCase {
void testRaceDatesBeforeToday(){
def lastWeek=new Date()-7
def race=new Race(startDate:lastWeek)
assertFalse "验证失败", race.valid ...
当创建领域类时,会同时生成测试类
在test/unit目录下可以找到
当你在生成的测试类中编写好测试代码时,命令行中进入工程目录,输入:grails test-app
则会在控制台打出测试结果,也可以在target/test-reports/html目录下用IE打开index.html,会看到工程的所有测试类测试结果,如果只想测试单个类,如:Race,则在命令行中输入:grails test-app Race
相关代码如下:
领域类:
package com.rt
import java.math.BigDecimal;
class Race {
String nam ...
注册时,不希望用户填过去的时间。
以下方法无效:
class Reg{
//...
Date regDate
static constraints = {
//...
regDate(min:new Date()) //new Date()是在每次启动服务器时赋值
}
}
以上方法理论上没问题,但是可能和我们预期的不一样,就是因为这种方法是在启动服务器时设置,这相当于是设置了一个固定值。
有效的方法是自定义验证:
class Reg{
//...
Date regDate
sta ...
class Reg{
String name
int age
//通过constraints闭包增加对字段约束
static constraints = {
name(blank:false, maxSize:50)
age(min:1,max:150)
}
}
class Reg{
String name
int age
String birthday
//通过constraints闭包指定字段顺序
static constraints = {
name()
age()
birthday()
}
}
static mapping方法不只是做些关闭时间自动生成,数据库表与类,字段与属性的映射之外,还可以做如下事情:
一.想返回一个Domain类按日期排序
class Reg {
Date startDate
//其它属性略
static mapping={
sort "startDate"
}
}
二.领域类的生命周期事件
class Reg {
//其它略
def beforeInsert={
//...
}
def beforeUpdate={
//...
}
...
特殊属性名:
class Reg {
Date dateCreated //Grails将自动在第一次向数据库保存实例时填上这个值
Date lastUpdated //Grails将在每次更新数据到数据库时填上这个值
static mapping={
autoTimestamp false //关闭时间自动保存
}
}
运行grails工程时,有时会出现tomcat的8080端口被占用:
解决方法:
一.命令行中输入:grails -Dserver.port=9090 run-app
二.可以在$GRAILS_HOME/scripts/_GrailsSettings.groovy找到
serverPort = getPropertyValue("server.port", 8080).toInteger()
把8080永久性地改为其它端口
准备条件:
1. 建WEB工程:ssh2
2. 建数据库ssh2,表user
3. 导入struts2,hibernate,spring包,注意包冲突,另导入commons-dbcp.jar, commons-pool.jar数据库连接池包
具体步骤如下:
1. 实体类
1.1 User.java
package com.ssh2.bean;
public class User {
private int id;
private String firstname;
private String lastname;
private int age;
pu ...
准备条件:
1. 创建数据库hibernatespring,表person
2. 建工程hibernatespring,导入hibernate和spring包
具体步骤:
1.Person.javqa
package com.test.bean;
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id ...