目前在一家公司实习,该公司用的是ofbiz框架,我便放下SSH,投身上ofbiz的学习上去,一开始是很抵触的,但是学着学着发现其实框架道理是相似的,为了将代码解耦,每个框架都有自己的独特解耦之道和精妙之处,万事开头难,所以不要轻易放弃。
熟悉了一周大概摸清了ofbiz的轮廓,顺手开发一个ofbiz入门的例子(对user的增删改查,以及分页展示)
开发过程中也遇到了很多问题,经过一番推敲,已经摸到问题的缘由,之后会有介绍
列出一个目录:关于ofbiz框架的crud以及分页都是简单的demo供入门者学习一下
(原创作品,请勿抄袭)
下面进入正题:
开发环境:jdk6+mysql5.5+ofbiz9+eclipse
首先,安装好ofbiz,把数据库配置到本地mysql,可用参照:配置ofbiz连接本地mysql
配置好之后,可以开始进行开发了,将ofbiz项目的build.xml添加到eclipse中的ant面板
点击create-component,会出现一些对话框,分别是component-name,component-resource-name,webapp-name,base permission,confirm
在数据库中建好user表,在你的component根目录里找到entitydef目录下的entitymodel.xml(该文件是配置entity实体类,与数据库中的表对应)
user表:
字段名 | 类型 | 长度 | 是否主键 |
id | int | 10 | Y |
username | varchar | 50 | N |
password | varchar | 50 | N |
nickname | varchar | 50 | N |
registerdate | datetime | 0 | N |
配置entity:
配好entity后,还需修改entitydef目录entitymodel.xml文件(创建一个entity-group),把entity附属到这个group中,在ofbiz-component.xml注册这个group配置文件然后在entityengine.xml配置好entity-group与datasource的映射,使entity-group和datasource对应起来,这样在java类中就可以操作user表了
在entitygroup.xml配置文件中
在entityengine.xml文件中的default delegator中配置entitygroup与datasource的映射
datasource:
在src目录下创建UserService.java和UserEvent.java(分别放在com.service和com.event包下)
这里的service和event中的方法必须是static的否则会报错,请参考:ofbiz调用服务报错
UserService.java
public class UserService {
public static Map registerUser(DispatchContext ctx, Map context){
Map result = ServiceUtil.returnSuccess();
//取得实体引擎实例
GenericDelegator delegator = ctx.getDelegator();
//创建一条Uom记录的对象
GenericValue user = delegator.makeValue("User");
user.set("username", context.get("username"));
user.set("password", context.get("password"));
user.set("nickname", context.get("nickname"));
//取得当前时间戳
Timestamp currentTime = UtilDateTime.nowTimestamp();
user.set("registerdate", currentTime);
try {
//插入数据
user.create();
} catch (GenericEntityException e) {
e.printStackTrace();
return ServiceUtil.returnFailure();
}
return result;
}
}
public class UserEvent {
//方法必须是static
public static String register(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {
LocalDispatcher dispatcher = (LocalDispatcher) req.getAttribute("dispatcher");
Map results = null;
Map contexts = UtilMisc.toMap();
//从请求中得到参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String nickname = req.getParameter("nickname");
//判断参数是否为空
username = username == null || "".equals(username) ? "test" : username;
password = password == null || "".equals(password) ? "test" : password;
nickname = nickname == null || "".equals(nickname) ? "test" : nickname;
//contexts为传入service的参数列表
contexts.put("username", username);
contexts.put("password", password);
contexts.put("nickname", nickname);
try {
//调用注册的service
results = dispatcher.runSync("registerUser", contexts);
} catch (GenericServiceException e) {
e.printStackTrace();
return "error";
}
return "success";
}
}
service.xml
controller.xml中配置request-map
注册的view
显示结果的view
这里只是简单的screen直接对应到show.ftl
show.ftl
hello world.
${request.getAttribute("mes")?default("")}
username
password
pickname
registerDate
<#assign users = request.getAttribute("users")?if_exists>
<#list users as user>
${user.username}
${user.password}
${user.nickname}
${user.registerdate}
#list>
在user表中添加两条数据
运行结果截图: