`
jusescn
  • 浏览: 125283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Pragmatic Struts

    博客分类:
  • ssh
阅读更多
转springside关于Struts快速开发。
Struts 1.2 其实已经大不同,只要大家有简约的态度,即使我们日常的Struts,同样可以写得非常精简,不一定要如传统观念认为的那么繁重,从而节约每天编码的时间。

    Struts与Spring结合的基本知识请阅读Struts使用要点

1.DispatchAction

     以一个Controller响应一组动作绝对是Controller界的真理,Struts的DispatchAction同样可以做到这点。

<action path="/admin/user" name="userForm" scope="request" parameter="method" validate="false">
    <forward name="list" path="/admin/userList.jsp"/>
</action>

    其中parameter="method" 设置了用来指定响应方法名的url参数名为method,即/admin/user.do?method=list 将调用UserAction的public ActionForward list(....) 函数。   

    public ActionForward unspecified(....) 函数可以指定不带method方法时的默认方法。

2.No FormBean

    Struts 1.2.7 之后一共有三种方法,不需要定义FormBean Java类也不需要在struts-config.xml里详细定义formBean的每个属性。

    第一种是appfuse里使用的,定义DynaValidatorForm里,内嵌一个pojo属性.

<form-bean name="userForm" type="org.apache.struts.validator.DynaValidatorForm">
            <form-property name="user" type="org.appfuse.model.User"/>
</form-bean>
//取得form DynaActionForm userForm = (DynaActionForm) form;
User user = (User) userForm.get("user");
//设置form
userForm.set("user",user);

    第二种是用BeanValidatorForm,直接把Pojo作FormBean,无需继承于FormBean接口。

<form-bean name="userForm" type="org.springside.helloworld.domain.User"/>
//取得form BeanValidatorForm userForm = (BeanValidatorForm) form;
User user = (User) userForm.getInstance();//设置formBeanUtils.copyProperties(userForm, user);

    第3种是用LazyValidatorForm ,特别适合于FormBean中并不包含POJO商业对象所有属性的情况,因为通常项目里都属于这种情况,所以springside默认使用lazyValidatorForm.

    比如User对象 有 id,name,status三个属性,而form表单中只有id和name两个input框,如果使用方法1,2,直接把user 作为 form bean,  user对象的status因为没设值,将为null,  copy 到作为商业对象的user时,就会以null覆盖原值。而lazyBean就没有这个问题,如果form中没有status属性,它不会将它copy给商业对象。

    另外,apache commons-beantuils 1.7.0的lazybean仍有小bug,需要使用commons-1.7.1 snapshot版,而且它直接提供下载的snapshot版缺少了几个class,应使用springside提供的版本。

<form-bean name="bookForm" type="org.apache.struts.validator.LazyValidatorForm"/>
BeanUtils.copyProperties(user, form);

       注意User对象被自动绑定,默认Integer id 在空值时会被赋值为0,需要增加converter,让其默认为null,虽然也可以在web.xml里进行相关配置,但还是在基类里配置了比较安全。

static {
ConvertUtils.register(new IntegerConverter(null), Integer.class);
}

3. struts-config.xml使用通配符

     对一些CRUD的Action,可以使用通配符,如果这批action里某个action某个方法还存在特殊路径,可以在代码里直接new ActionForward("/foo.jsp");

<action path="/admin/*" name="{1}Form" parameter="method" scope="request" validate="false">
            <forward name="list" path="/WEB-INF/pages/admin/{1}List.jsp"/>
            <forward name="edit" path="/WEB-INF/pages/admin/{1}Form.jsp"/>
            <forward name="success" path="/admin/{1}.do?method=list" redirect="true"/>
</action>

  4. 一些不必受困于Struts机制的简化写法

    一些简便直接的方法,大家可不必太受困于Struts的机制:

  4.1 不在struts-config.xml配置jsp路径,直接在代码里跳转

     用于某些需要在代码里动态拼装的路径:

return new ActionForward("/foo/bar.jsp");
or
return new ActionForward("/foo/bar.jsp",true);//redirect

   4.2 不走jsp,直接输出字符串

ActionForward execute(....){
    try {
            response.setContentType("text/html;charset=UTF-8");
            response.getWriter().write(text);
    } catch (IOException e) {
            log.error(e);
    }
    return null;
}

 4.3. 不依赖Struts Taglib,EL直接输出FormBean 属性

普通FormBean:${bookForm.image}

LazyValidatorForm:${bookForm.map.image} 

其中bookForm 是formBean名。另一种输出属性的方式是使用jodd-form, 设<jodd:form bean="bookForm">

4.4 不用i18N地使用Message与Error

   Struts的ActionMessages很常用,但只接收i18N的key作为输入参数,老定义i18n很麻烦,偏方之一就是设一个message= {0},然后直接new ActionMessage("message", message);

评论

相关推荐

    Medea: pragmatic and simple MDA-开源

    Medea是一个实用的代码生成框架。 它采用XMI格式的UML类和状态图,并使用XSLT模板为各种技术,层和完整的应用程序生成代码:J2EE,CMP,Hibernate,JSP,Struts,JSF,jBPM,XSD

    Java学习资料下载大全

    - "Struts in Action" 关注Struts框架,用于构建MVC(模型-视图-控制器)架构的Web应用。 - "Lucene in Action" 教授如何使用Apache Lucene进行全文搜索引擎的开发。 - "Better Faster Lighter Java" 提供优化...

    从 Java 到 Ruby_ 每一个管理者应该知道的事情

    压缩包中的文件列表暗示了这可能是一本电子书的资源,例如 "Pragmatic.Bookshelf.From.Java.to.Ruby.Jun.2006.pdf",这可能来自 Pragmatic Bookshelf 出版社,一家知名的程序员图书出版商。"intro.txt" 可能是书籍的...

    springside4-master

    SpringSide4-Master,这是一个以Spring Framework为核心的JavaEE应用参考示例项目,它以其Pragmatic(实用主义)风格深受广大开发者喜爱,是JavaEE世界中不可或缺的技术瑰宝。该项目不仅体现了Spring Framework的...

    springside的源码,挺好的

    SpringSide以Spring Framework为核心,提供Pragmatic之中又适合工业化大规模开发的企业应用Kickstart。 如果说Sun 的代码规范规定了大家在代码中如何命名变量,怎么编写注释的话,SpringSide则是对怎么用不轻也不重...

    JAVA资料下载大全

    - 描述: Struts是一个基于MVC模式的Java Web框架,本书详细介绍了Struts框架的使用方法。 - **链接**: http://bbs.topsage.com/dispbbs.asp?boardID=121&ID=174005 8. **Lucene in Action** - 描述: Lucene是...

    使用SpringSide开发Web项目

    SpringSide是一个以Spring Framework为核心,遵循Pragmatic风格的Java EE应用参考示例。它集成了当前Java EE世界的主流技术选型与最佳实践,旨在帮助开发者更好地理解和使用这些技术。 **主要技术包括:** - **IOC...

Global site tag (gtag.js) - Google Analytics