七:建立公司实体类和控制类 最后,我们建立公司实体类和控制类。同样,在app/models目录下,建立Company类如下:$ S; V4 A6 m } ]/ }5 L4 |- e; P
package models;* c( H7 ^1 ]1 [: a- t
% p& A Z6 V9 q1 N/ \2 a7 S" Aimport javax.persistence.Entity;
" B4 v/ Q' Q' z' a
4 i% {( Z, H# |3 W- D; @9 z# Yimport play.db.jpa.Model;; J# q, x" P1 |0 Y6 ~5 l+ f
7 q! e- V' l% Q) q/ z
@Entity, J: t) ]3 R' v% h: c4 g; d3 [8 W
. k5 V* |4 U; q7 v. T: G
public class Company extends Model {1 f- X& w. d" E- y. y. y
+ Q6 K) V6 b" b# f, i& a
public String name;' L& f5 s5 g$ e/ s' h
2 R4 Y% T6 S5 m. H5 v* X
public String address;+ P" Z" a' o: m" Q: q" S
* G0 J; U& X( s4 V2 P+ z' J' q
public boolean isPublic;
) o& Q% K4 V+ T% i& i6 }3 p# C+ C4 R1 P; w) D# v% A: D
}
2 \/ F1 S1 |8 p# W6 ^; k
5 r5 T- z! w, x, X" f5 t: s+ o' I( n1 R7 [) p% P& Q" g2 v
company的控制层类代码如下:
7 O' q% S' k8 F" \* C8 v1 y3 bpackage controllers;
$ [' m5 i, y& {( d7 h) D! k! E4 @ ~) i7 z+ c' p3 g/ O
import models.Company;6 ]: I W9 B* u0 H4 @+ j
( a$ u0 f1 d+ F# _0 J
@CRUD.For(Company.class)
6 M" Q$ X8 W6 d/ M7 b, p2 s8 E7 F5 L6 V
public class Companies extends CRUD# ?; ` W: U4 D, I H/ v+ [
: m' v* V5 C3 y{+ z1 |* o; P/ r, P5 X& U! ]" e9 d& T
! S( _3 E2 ~- Z1 a9 |! F}+ T9 u3 H. }) m$ ?/ b1 P* v/ ]
$ V; j- M* S+ M/ Z2 j' U
, ^, d$ Y/ Y! O8 ]0 Z+ X. A 这里要提醒一点的是,由于company的复数是companies,而play框架原先约定俗成的是在实体类名后直接加字母s,所以这里使用了注解 @CRUD.For(Company.class),以表明该控制类文件Companies是为company实体类服务的。
# Z0 }1 A) x3 {5 j 同样,一个公司里有许多部门,因此在Deparment部门类中,建立如下的多对一关系:! i. a9 O. C: ], `6 K* @% O
@ManyToOne9 K; |2 D) Q. _8 x4 Z, o
8 j, t% c/ Y! F% A bpublic Company company;
- ~- {! [6 J5 v- ]/ e9 O# E+ M0 B
* D: y: v& {2 u. R0 [! N- q4 z 再次运行程序,可以看到,现在三个实体类都建立起来了,可以分别对公司,部门和员工进行CRUD操作,如下图:
* B- ^; @8 Q- `8 X# ?: s$ U! i4 G2 t' h
编辑视图( R7 m y* J, L0 g
八:优化列表5 ~) P( ~6 N9 j1 B2 h
我们在查看每个实体类的列表时,发现在列表中,会把每条记录的id都显示出来,这个在程序中假设不需要看到id字段的话,可以通过修改代码实现,比如在Company类中,增加toString方法即可:
4 r* H' E$ `) S. }8 \3 d6 }public String toString() {
/ Z9 Q8 N& H; e- X4 ~9 i2 P
, k! T# ~& q( x8 C0 }return name;
! z! y' i" [' F# W# Y5 W3 j7 C5 ]2 }
}
2 @: y- _. g A
1 Z% l% r1 V! L& O p5 a
+ ?4 \ S$ \' R& k8 t U 而在Department和Employee类中,可以采用同样的方法,以不显示它们的id字段。
; P2 q; Q5 i6 _- b 九:增加校验规则
2 [, }4 ^% z d4 c 在输入数据时,校验规则是必不可少的,在play框架中,可以很方便地使用注解来增加校验规则,比如在员工类中,可以要求输入的fullName字段内容不能超过100个字符,而且fullName字段不能为空,则在Employee类中,增加如下代码即可:
" ~. |# ^; \9 X* n8 N" A" p# x@Required @MaxSize(100) public String fullName;1 p, \; [0 v3 o1 |1 |; f
8 q! I( A7 {5 u: v L$ ?: X 下面列出一些常见的校验规则:
3 a D; S2 S, k" c/ y1 C1 G7 d @Email 校验email合法性 @InFuture 检验是否将来的日期 @InPast 检验是否是过往的日期 @Match 对正则表达式的判断 @Max 最大值 @Min 最小值 @Range 检验范围 @URL 检验是否URL
* \ b/ R9 d# b$ T; i# m 十:改变列表的显示格式( e) V; X2 ?1 U' G- B
在默认情况下,比如查看employee列表,只能看到employee的名称字段,假设要在列表中看到每条记录的每个字段的话,要修改下play的模版,方法如下:
% r2 }' L6 ~# X, u/ n; m9 K! [ 1 停止现在的服务,CTRL-C停止。
0 l% J7 E! m" e+ m; o' i6 v5 R 2 在命令行下,输入:
! t& t1 U! o5 q* Q0 g' Hplay crud:ov --template Employees/list
8 z. }8 s/ C( i% Y
/ ]& h" m* A4 q: M/ L 这将在app/views/Employees目录下新建立一个list.html的页面。
% H4 i, z( z i' p @# \ 3 重新输入play run,并切换到eclipse中的项目中,按F5更新页面。5 ]& ^' T6 m1 d$ y9 o
4 在eclipse中,打开app/views/Employees/list.html,这个是雇员列表的模版文件。
( R; i: U( C3 n# W 5 在该页中,找到id=”crudListTable”部分,修改为:3 b7 w/ L) z- K. A9 }8 V- G
#{crud.table fields:['fullName', 'dateOfHire', 'salary'] /}
9 P. G- O6 G9 q7 I* r8 \9 @* x! S4 m( s3 b4 |
即显示完整所有字段。: c Q/ H+ c; o8 I9 a/ \
6 重新运行程序,即可看到效果,如下图,可以看到,能看到所有字段值。9 U' o9 m3 A) X: o; r6 q
+ L) C; D7 n: x2 R$ a, s
十一:改变列表中标题的显示
4 G" Q# j, \* H- z: o) g6 O 在默认状态下,列表中显示的字段标题是用实体类中的名称的,假如想把fullName修改位Full Name的话,可以在conf/messages下,增加:) v7 `- W* h% `% r6 |
fullName=Full Name% a) D3 D% I, v, U# z# S4 ^* r9 Y
即可,如下图显示:
~$ i$ T7 _- ^0 q) X( [) } T+ g# w N# n
小结
3 [ e7 _0 m( v4 x+ Z7 c4 l7 ? 在本文中,我们学习了如何使用Play框架的脚手架功能,快速搭建CRUD的应用原型。Play框架的配置方法简化了工作代码量。目前Play框架正在 不断的完善中,读者可以根据本教程的指引实际操作后,进一步阅读官方文档加以深入学习。 |