文章的CRUD

1.创建项目

经过准备工作,现在你已经将metawork安装到了你的本地maven Repository中。下面,我们开始开发第一个示例。这个示例的内容是一个简单的文章模型的CRUD。首先,我们新建一个项目。在命令行中,执行如下命令可以新建一个web项目:

mvn archetype:create \   
-DgroupId=com.mycompany \   
-DartifactId=article \
-DarchetypeGroupId=net.lingdot.metawork \
-DarchetypeArtifactId=metawork-archetype-webapp \
-DarchetypeVersion=1.0

新创建的项目中包含了一个测试实体的CRUD实现。此时你可以直接使用mvn package命令build应用,然后放在tomcat中查看效果。启动后需要的配置过程可以参照本页的3.5。但我们推荐你还是继续阅读本文档,之后你将能够自己动手构建一个简单的CRUD应用。

如果你希望使用IDE来完成项目,那么可以在项目目录下启动命令行,执行mvn eclipse:eclipse或者mvn idea:idea等等的命令来生成IDE的项目配置文件。然后启动IDE,将这个项目导入就可以了。

2.创建实体类

根据前面描述的用例内容,我们创建一个实体类来表达文章模型。代码如下:

package com.mycompany.article.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Column;

import net.lingdot.metawork.core.entity.meta.annotation.DomainModel;
import net.lingdot.metawork.core.entity.meta.annotation.Property;


@Entity
@DomainModel(name="文章",folder="article",category="文章")
public class Article{

	private Long id;
	private String name;
	private String content;
	private String author;
	
	/**
	 * @return the id
	 */
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Property(name="编号")
	public Long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}
	
	/**
	 * @return the content
	 */
	@Property(name="内容")
	@Column(length=1000)
	public String getContent() {
		return content;
	}
	/**
	 * @param content the content to set
	 */
	public void setContent(String content) {
		this.content = content;
	}
	
	/**
	 * @return the title
	 */
	@Property(name="标题")
	public String getName() {
		return name;
	}
	/**
	 * @param titlethe titleto set
	 */
	public void setName(String name) {
		this.name= name;
	}
	/**
	 * @return the checkDescription
	 */
	@Property(name="作者")
	public String getAuthor() {
		return author;
	}
	/**
	 * @param authorthe authorto set
	 */
	public void setAuthor(String author) {
		this.author= author;
	}
}

上面的代码中,除去JPA的Annotation之外,有两个你会觉得陌生的annotation,他们都是Metawork定义的。

一个是标记在类上面的DomainModel。这个注解向metawork说明了几件事情,首先,当前实体的显示名称是"文章",其次,管理这个实体的页面文件会放在webapp/article目录下,最后,这个实体归类为"文章"。

另外一个标记是Property。上面的代码中仅用到了他的一个属性name,向metawork说明这个属性的显示名称。

需要注意的是,这些标记和属性都是可选的。如果你不加这些标记,或者不写其中的一些属性,那么metawork会根据这个实体类的信息来确定一些默认值。

然后创建一个Hibernate配置文件,告诉Hibernate你要将Application类持久化到数据库。在src/main/webapp/WEB-INF/config目录中创建一个目录article用于存放本项目的配置,然后在其中创建hibernate.cfg.xml。这里目录名可以随意,但这个配置文件名必须是hibernate.cfg.xml。metawork会自动读取config目录下的所有子目录中的hibernate.cfg.xml。

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<mapping class="com.mycompany.article.entity.Article"/>
	</session-factory>
</hibernate-configuration>

3.创建表单

根据实体类上面的标记,我们要把管理Article实体的页面文件放到article目录下。于是我们在src/main/webapp中创建article目录,然后创建表单页面article-edit.jsp(这个文件名是有讲究的,实际上是"实体别名-操作别名.jsp",这样就不必在后台配置视图位置了)。文件内容很简单,就是一个使用了struts2标记的表单页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ include file="/metawork/common/taglibs.jsp"%>
<!DOCTYPE html PUBLIC 
	"-//W3C//DTD XHTML 1.0 Transitional//EN" 
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%@ include file="/metawork/common/meta.jsp"%>
<title>Insert title here</title>
<script type="text/javascript" src="${ctx}/metawork/common/script/common.js"></script>
<script type="text/javascript" src="${ctx}/metawork/common/script/form.js"></script>
<link rel="stylesheet" type="text/css" href="${ctx}/metawork/style/form.css"/>
<s:head/>
</head>
<body>
	<div id="formDiv">
		<s:form id="articleForm" validate="true">			
			<s:hidden name="id"/>
			<s:textfield name="entity.name" label="标题"/>
			<s:textfield name="entity.author" label="作者"/>
			<s:textarea name="entity.content" label="内容" rows="5" cols="50"/>
			<s:submit id="saveButton" value="保存" 
				onclick="saveEntity('articleForm');return false;"></s:submit>
		</s:form>
	</div>
	</body>
</html>

4.运行

在命令行中执行mvn package,把项目构建成为一个war包。然后放到Tonmcat6的webapps目录下,然后启动之。

5.配置

系统启动后,访问应用,系统提示你需要登录。输入默认的系统管理员用户名和密码admin,lingdot。登录后,你将看到metawork系统管理的主界面。

展开节点"组织机构",可以看到一个机构"零点工作室",然后点击这个机构节点,在右边出现的第一个Tab页"人员"列表中,选中"管理员",打开。此时会出现管理员这个用户的信息编辑页面。选中节点树上的根节点,点击下面的"新增"按钮,在出现的对话框中输入"文章管理",点击确定。然后选中新出现的"文章管理"节点,点击节点属性,会出现该节点的属性编辑对话框。点击新建按钮,加入一个新的属性,属性名是"function",并在右边的值输入框中输入"article",含义是点击这个节点的时候使用文章管理功能(这是系统初始化后自动创建的一个功能,名字是实体类名小写第一个字母的结果,该功能可以管理全部的文章数据,可以执行通用列表、通用编辑、通用查看等操作),然后点击确定。最后点击页面下方的保存按钮。

至此我们给管理员这个用户新增了文章管理节点,这个用例开发配置也就就完成了。。在整个工作区间的上方的欢迎信息后面有三个按钮,点击第三个按钮(刷新树),此时可以看到节点树上出现了我们新增加的节点。点击该节点,就可以体验一下Metawork提供的基础功能了~。

6.其他

  1. 实体别名、功能别名都应该是全局唯一的,而操作别名需要在一个实体的范围内唯一
  2. 调用一个操作,可以访问形如"/功能别名/操作别名.后缀名"的URL(例如/user/list.xhtml调用用户管理功能的列表操作),
    后缀名可以是xhtml,json,jxml,分别对应不同的展现方式
  3. 在框架的struts配置文件中,配置了*/*这样统配的Action映射,访问*/*.(xhtml|json|jxml)会触发调用通用Action
团队
Group: Lingdot
Allan Zhang (allanz)
guyan6644@163.com
Jonney Xian (jonney)
jonney_82@163.com
亚运 祝 (zhuyy)
zhuyy0825@163.com
刘 洛麒 (llq667)
llq667@gmail.com
孙 海龙 (sunhl)
sunny.hl@163.com
宋颂 (ssong)
ss0070@163.com
张盈盈 (zyy200411)
04281118@bjtu.edu.cn
振强 许 (xuzz)
handstandboy2008@163.com
牛 俊力 (niujl)
05272140@bjtu.edu.cn
胡文锦 (cattyjin)
07122053@bjtu.edu.cn
苏 哲 (billy)
mvpierce34@gmail.com

标签

 
(没有)