论坛首页 Java企业应用论坛

xyz,pojo的mvc框架,替代webwork一Action多CURD操作干净实现

浏览 26575 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-11-10  
什么框架都一样,不彻底弄清楚内部原理,出错了就不知道是什么问题
0 请登录后投票
   发表时间:2006-11-10  
UserLogic的代码如下:
package sample.logic;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import sample.dao.IUserDAO;
import sample.domain.User;

import xyz.ext.dao.IGenericDAO;
import xyz.ext.dao.QueryInfo;
import xyz.ext.logic.GenericLogic;
import xyz.frame.annotations.Out;
import xyz.frame.annotations.Read;

public class UserLogic extends GenericLogic<User,String>{
	private static final Log LOG = LogFactory.getLog(UserLogic.class);
	
	@Read(object="Spring:userDAO")
	private IUserDAO dao;

	@Override
	public IGenericDAO<User, String> getIGenericDAO() {
		return dao;
	}

	@Out(key="userArray")
	public Object[] getUserArray(@Read @Out(key="queryInfo")QueryInfo queryInfo){
		queryInfo.setFrom("from User");
		QueryInfo queryInfoTotalPage = new QueryInfo();
		queryInfoTotalPage.setFrom(queryInfo.getFrom());
		queryInfoTotalPage.setSelect(" select count(*) \r\n");
		int total = dao.getCount(queryInfoTotalPage);
		int starno = queryInfo.getPageStartNo();
		int totalPage = 0;
		if (total > 0)
		{
			int pageSize = queryInfo.getPageSize();
			totalPage = total / pageSize;
			if (0 != (total % pageSize))
			{
				totalPage++;
			}
		}
		queryInfo.setTotolPage(totalPage);
		return dao.getByQueryInfo(queryInfo);
	}
	
	/**
	 * must out otherwise threw nullpointexception
	 * @param name
	 * @return
	 */
	@Out(key="user")
	public User getByName(@Read(key="name") String name){
		LOG.info("name--"+name);
		User entity= super.getById(name);
		return entity;
	}
}

大家可以看到,为了支持分页,getUserArray的代码写的太多,在xyz0.2版里面,我决定在使用注解来解决这个问题:
@Page
@Out(key="userArray")
	public Object[] getUserArray(@Read @Out(key="queryInfo")QueryInfo queryInfo){
return dao.getByQueryInfo(queryInfo);
}

来解决这个繁琐的代码问题

而getByName其实是getById,由于xyz0.1的一个bug导致getById不能把结果放到上下文,这样,页面就取不到结果:
	/**
	 * 从数据库里得到实体对象
	 * 
	 * @param clasz,实体的类的对象
	 * @param id,实体的id
	 * @return 返回一个代表该实体的pojo
	 */
	@Out(key="currentEntity")
	public Obj getById(@Read(key="id") Id id){
		Obj entity= getIGenericDAO().getById(id);
		return entity;
	}

原来的忘了@Out(key="currentEntity")这一行,0.2版会处理的
0 请登录后投票
   发表时间:2006-11-10  
UserList的页面:

<html>
<head>
<title>user curd</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<script>
   function deleteUser(name){
      if(confirm("Are you delete user:"+name)){
         window.location="UserLogic!doDeleteById.xyz?id="+name;
      }
   }
</script>
</head>

<body class="rightbody">
<%
   xyz.ext.dao.QueryInfo query =(xyz.ext.dao.QueryInfo)request.getAttribute("queryInfo");
   int totalPage = query.getTotolPage();
   int start = query.getPageStartNo();
   int first = 0;
   int pre = (start - 1) > 0 ? (start - 1) : 0;
   int next = (start + 1) < (totalPage - 1) ? (start + 1) : (totalPage - 1);
   int end = (totalPage - 1>0)?(totalPage - 1):0;
   String firstUrl;
   String preUrl;
  String nextUrl;
  String endUrl;
  StringBuffer sb = new StringBuffer("UserLogic!getUserArray.xyz");
					
  String url = sb.toString();
  firstUrl = url + "?pageStartNo=" + first;
  preUrl = url + "?pageStartNo=" + pre;
  nextUrl = url + "?pageStartNo=" + next;
  endUrl = url + "?pageStartNo=" + end;
					
%>

<table cellspacing="1"  class="tableWidth1">
  <tr>
    <td width="20%" align="right"></td>
    <td>
  <a href="<%=firstUrl%>">first page</a>&nbsp;
<a href="<%=preUrl%>">pre page</a>&nbsp;&nbsp;
<a href="<%=nextUrl%>">next page</a>&nbsp;
<a href="<%=endUrl%>">last page&nbsp;</a>
    </td>
  </tr>
</table>
<br />
<table width="100%" cellspacing="1" class="tableWidth" >
  <tr bgcolor=lightgrey>
    <td width="30%" class="blue_tr">Name</td>
    <td width="40%" class="blue_tr">Password</td>
	  <td width="30%" class="blue_tr">Edit</td>
  </tr>
  <%
      Object[] userArray=(Object[])request.getAttribute("userArray");
      for(int i=0,len=userArray.length;i<len;i++){
          sample.domain.User user=(sample.domain.User)userArray[i];
  %>
  <tr>

    <td><%=user.getName()%></td>
    <td><%=user.getPasswd()%></td>
	  <td><a href="UserLogic!getByName.xyz?name=<%=user.getName()%>">Edit</a>||
	  <a href="javascript:deleteUser('<%=user.getName()%>')">Delete</a>
	  </td>
   </tr>
   <%}%>
</table>
<div align="center" class="page">
	
  <a href="UserAdd.html">Add User</a>
</div>
</body>
</html>

对于jsp的改进,可能是需要添加一个分页的taglib了,这样,页面将会干净许多!
同时,这里,给出了getByName,doDelete,Add的调用方法,大家可以看看那些url,下面将只给出UserAdd的编辑界面和UserView界面的代码,因为都很简单:
0 请登录后投票
   发表时间:2006-11-10  
/sample/logic/UserAdd.html
<form action="UserLogic!doInsert.xyz">
   Name:<input name="name"><br>
   password:<input type=password name=passwd><br>
   <input type=submit>
</form>


/sample/logic/UserLogic!getByName.ok.jsp的代码
<%
   sample.domain.User user=(sample.domain.User)request.getAttribute("user");
%>
View User ok!<br>
<form action="UserLogic!doUpdate.xyz">
Name is:<input name="name" value=<%=user.getName()%> readonly/><br>
Password is:<input name="passwd" value=<%=user.getPasswd()%> /><br>
<input type=submit>
</form>
0 请登录后投票
   发表时间:2006-11-10  
如果大家想看详细的实现的话:可以到sourceforge去当例子的war包,当下来放在web服务器上就能运行。
那里每个例子都把源码显示了:
http://sourceforge.net/projects/jxyz
0 请登录后投票
   发表时间:2006-11-14  
zhouxuanyi 写道
galaxystar 写道
到底是人玩框架还是框架玩人!
郁闷ing~~~~~
不是啊,是我在开发过程中发现现存的框架都不能完全满足需要才自己做的这个东西啊,而且,每一个需求都是先写测试,再实现的,完全是从实际中来的,你可以down下source看看再说吗

有时候不是框架不能满足而是自己没有在某些方面没有很好的利用起框架,框架多是好事情啊,多看几个只有100个类以内的框架以后相信对web编程中平时可能忽视掉的知识点等都是很好的补充,通过看这些框架做做简单的demo是个不错学习方法,直接通过大的框架来学习的话对大部分人来说要求太高了,建议新手多看看这些小框架。
0 请登录后投票
   发表时间:2006-12-22  
jianfeng008cn 写道
zhouxuanyi 写道
galaxystar 写道
到底是人玩框架还是框架玩人!
郁闷ing~~~~~
不是啊,是我在开发过程中发现现存的框架都不能完全满足需要才自己做的这个东西啊,而且,每一个需求都是先写测试,再实现的,完全是从实际中来的,你可以down下source看看再说吗

有时候不是框架不能满足而是自己没有在某些方面没有很好的利用起框架,框架多是好事情啊,多看几个只有100个类以内的框架以后相信对web编程中平时可能忽视掉的知识点等都是很好的补充,通过看这些框架做做简单的demo是个不错学习方法,直接通过大的框架来学习的话对大部分人来说要求太高了,建议新手多看看这些小框架。
也赞成jianfeng008cn的。
有时候就是这样,当大家框架用多了,可能反而不太注重基础了。公司就有这样的人,说自己对struts什么的精通。但是,要自己写一个基于mvc的servelt+javabean的小demo却不能很好的完成。所以,我认为基础最重要,只有基础牢了,才能真正的理解各种流行的mvc框架,才能更好的使用它们,才能更好的关注业务逻辑。
很佩服zhouxuanyi的耐心。刚下了代码,还没有看。有时间会研究。
0 请登录后投票
   发表时间:2006-12-22  
能否介绍下流程的思路,好比从用户发起请求到返回给用户,这个请求是怎么接受,怎么传给对应的处理方法,怎么返回的?谢谢:)

如果真的0配置,那么IOC注入怎么实现哪?
0 请登录后投票
   发表时间:2006-12-22  
PS:如果仅仅是为了不继承接口就可以拥有logic的功能,去handleRequest,那么spring就可以了啊。直接实现一个Hanlder(不要用默认的Controller),注册到spring里面,然后按照表单传入的参数选择调用的对象和方法去执行不就完了。
0 请登录后投票
   发表时间:2006-12-29  
我还是支持楼主的!现在就下源码研究一二!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics