论坛首页 Java企业应用论坛

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

浏览 26580 次
该帖已经被评为良好帖
作者 正文
   发表时间:2006-12-29  
zhouxuanyi 写道
讲到ModelDriven,我的理解和xwok的定义不太一样,我认为对于一个复杂对象a,他有两个以上属性c,d
我们用url这样?c=xxx&d=xxx而不是?a.c=xxx&a.d=xxx,在form中的写法就免了:
这样,webwork确实最多支持一个Model,而xyz可以支持多个,不过我这个例子,也只是一个
/**
*this is a logic to read a domain:user's parameter from request
*and then fill user attribute then put user into request attribute
*/
package sample.logic;

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

import sample.domain.User;

import xyz.frame.annotations.Out;
import xyz.frame.annotations.Read;

public class ModelLogic {
	private static final Log LOG = LogFactory.getLog(ModelLogic.class);

	@Read
	@Out
	private User user;
	
	public void showUser(){
		LOG.debug("user is:"+user);
	}
}

在我看来支持一个model就等于支持无数个model,他又不限定这个model只是pojo,很容易就可以扩展,如果还想进一步支持到一些findresource特性可以修改modeldriven的interceptor也是很容易的事情。
0 请登录后投票
   发表时间:2006-12-29  

看看俺整的MVC框架 ajf(agile java framework)
献丑了

mvc,连接池,缓存,jdbc tool,sqlmap,模板,js 等全部DIY

根据method参数自动调用相应的execute函数 execute_{method}
/x/user$query.do
/x/user$update.do
/x/user$delete.do

详情可参考
http://www.iteye.com/topic/38847

http://www.javaresearch.org/article/58413.htm
粉欢迎丢砖



public class UserAction extends BaseAction{

      
      public String execute()throws Exception{
    	  
    	
            return execute_query();
           
        
   }

      public String execute_query()throws Exception{
             
             String sql = "select * from t_user";              
             getConn();//获取连接                        
             Map map = PagedUtil.queryString(conn,sql,1,1,request);  
             //Connection conn是成员变量       
             add(map);             
             return "query";
             
   }

    public String execute_input()throws Exception{

           return "input";      
        
   }

   public String execute_insert()throws Exception{

           String table = "t_user";    
           String cols = "id,name,hh,ww,birth_day";
           int autoPK = 1;
           getConn();
           DBUtil.insert(conn,table,cols,autoPK,model); 
           return "query";
        
   }

   public String execute_edit()throws Exception{

           Map user = null;
           String objectid = (String)model.get("objectid"); 
           
           String sql = "select * from t_user where id='"+objectid+"'";
           getConn();
           user = DBUtil.queryOne(conn,sql,null);
           //sql = "select * from t_user where id=?"
           //user = DBUtil.queryOne(conn,sql,new Object[]{objectid});
           if(user==null){
               return "no_object";
           }
           model.put("user",user);
           return "edit";
   }

  
   public String execute_update()throws Exception{

           String table = "t_user";    
           String cols = "id,name,hh,ww,birth_day";
          
          
           conn = DBUtil.getConn();
           DBUtil.updateRow(conn,table,cols,1,model);
           return "!query";
        
   }

   public String execute_delete()throws Exception{

           String sql = "delete from t_user where id "; 
           DBUtil.batchDelById(sql,request);
           return "!query";
           
        
   }

 

}

       enjoy
0 请登录后投票
   发表时间:2006-12-31  
myreligion 写道
能否介绍下流程的思路,好比从用户发起请求到返回给用户,这个请求是怎么接受,怎么传给对应的处理方法,怎么返回的?谢谢:)

如果真的0配置,那么IOC注入怎么实现哪?

思路很简单,用户发请求时要包含4个信息:1,参数,2,名字空间,3,类名,4,方法名。
在非web应用中这样:---    
			    LogicProxy proxy =
			    	logicProxyFacory.createLogicProxy(
			            "/test/logic",
			            "ModelLogic",
			            "showUser",
			            extraContext);
proxy.execute();

在web应用中这样:http://test/logic/ModelLogic!showUser?name=name
然后,在LogicInvocation中就很容易利用反射得到类名,方法名,参数,执行之,将结果放在ThreadLocal里面,这样,就可以将信息传到View层了,View层利用命名规范查找View模板,这里的一切信息都是通过ThreadLocal传递,类名叫LogicContext,和xwork的ActionContext一摸一样,在WebView层的处理是和WebWork的Result一样,支持多种,自己扩张,也支持打印到Systemout的View,可以在Swing中使用。
0配置是mvc本身,而且xyz自己使用了hivMind ioc容器,他在很多方面比spring要好,而xyz的扩展0。1支持spring+hibernate,所以,xyz core ,0配置,而xyz 扩展,还是要配置的,而且,如果你想更改xyz的内核实现,而不更改内核代码,还是需要添加hiveMind配置的,这也是hiveMind做的比spring好的一个地方,灵活的支持迭代开发
0 请登录后投票
   发表时间:2006-12-31  
myreligion 写道
PS:如果仅仅是为了不继承接口就可以拥有logic的功能,去handleRequest,那么spring就可以了啊。直接实现一个Hanlder(不要用默认的Controller),注册到spring里面,然后按照表单传入的参数选择调用的对象和方法去执行不就完了。

当然可以了,但是spring如何和View交互,好像spring本身做不到,当然自己添加实现也可以,但是那样思路跟我这有什么区别,没有什么啊,只是我这不依赖spring而已,我想,在spring中加个拦截器,是很 容易实现类似功能的(pojo),xyz带接口也就80个类,但是,xyz使用hiveMind做ioc 容器,做框架使用hiveMind要比spring好多了,他们的区别我在javaeye发过一片文章,可惜被评为初级,cut it!了,而且,xyz本身支持spring 业务接口做logic,比如,如果你用ssh(struts,spring,hibernate)做应用,那么加上xyz框架,struts代码可以完全不要,只需要在spring service(handle、manager)都是,里面加一些java注解,改一下url,就可以抛弃struts 的java类和代码了,不好吗
0 请登录后投票
论坛首页 Java企业应用版

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