- 浏览: 338625 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
y_715:
document.getElementById("e ...
JSTL EC TABLE extremeTable 学习 -
wangyj0898:
学习了。。。
display table 标签用法 -
hejiajie2008:
没有图啊
图解myeclipse把maven普通java项目变成web项目的全程操作 -
zhangyu_2100:
[align=center][/align][color=br ...
request.getRealPath()的替代方法 -
senhui19:
LZ写的真不错呀,现在开发中都经常是用DetachedCrit ...
Hibernate的Criteria用法总结
1.概述
Struts大家都很熟悉,不再详细介绍,另请请参阅
1. Pragmatic Struts :SpringSide推荐的最新最Pragmatic用法。
2. SpringSide的Struts封装,SpringSide封装的Struts的CRUD Action基类,默认拥有CRUD的方法,大家可以自行扩展,或者这参考其思路重新封装。
1.1 参考书籍
《Jakarta Struts Cookbook》2005 O'Reilly,在铁手的博客上有部分中文翻译。
2. Spring与Struts的整合
2.1 在struts-config.xml中加入ContextLoaderPlugIn
ContextLoaderPlunIn是Struts 1.1+ 的插件,用来为 Struts 的 ActionServlet 加载 Spring的Application Context。这个Context引用 WebApplicationContext (由 ContextLoaderListener 加载) 作为它的父Context。默认的context文件是映射的 ActionServlet 的名字,加上 -servlet.xml后缀。 如果 ActionServlet 在 web.xml 里面的定义是 action, 那么默认的文件就是 /WEB-INF/action-servlet.xml。
格式如下:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"/>
2.2 在Struts-config.xml中加入DelegatingRequestProcessor
用Spring的DelegatingRequestProcessor重载Struts 默认的 RequestProcessor。这样当收到一个针对Action的请求时,DelegatingRequestProcessor会自动从Spring Context中查找对应的Action Bean。
格式如下:
<controller><set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/></controller>
2.3 建立struts-config.xml与action-servlet.xml中Action与Bean的对应关系
连接 struts-config.xml 和 action-servlet.xml 中的 Action与Bean的桥梁是action 的"path"和 bean 的"name"。如果你在 struts-config.xml 文件中有如下配置:<action path="/users" .../>
你必须在 action-servlet.xml 中将 Action bean 的名字定义为 "/users":<bean name="/users" class="..."/>
设定完以后,action的type属性可以省略不写,因为所有的Action都在Spring Context中寻找。注意这里bean用的是name属性,而不是id,因为"/"在id属性中是非法字符。
3.输入校验与消息显示
校验依旧比较麻烦,使用commons-validator 1.3版,使用struts 1.3.5带的validator-rules.xml。可选的validator 以 validator-rules.xml 中定义的为准。
3.1 定义
注意validaton.xml的头声明需改为1.3
<!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.3.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd">
编写validation.xml,如
<form name="userForm"> <field property="name" depends="required"> <arg0 key="user.name"/> </field></form>
并在resources/i18n/messages.properties 里加入需要的message,如user.name = User Name
struts-config.xml 加入
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/></plug-in>
3.2 客户端JS校验:
在每个form.jsp的form 加入onsubmit="return validateUserForm(this)", 其中UserForm是validation.xml中的form名
在jsp最后加入
<html:javascript formName="userForm" staticJavascript="false" cdata="false"/><script type="text/javascript" src="<c:url value="/scripts/validator.jsp"/>"></script>
3.3 服务端校验:
ActionMessages errors = form.validate(mapping, request); if (!errors.isEmpty()) { saveErrors(request, errors); return mapping.findForward("edit"); }
3.4 出错信息的显示:
信息参见message.jsp,可显示信息或错误。
在希望显示信息的地方加入<%@ include file="/commons/messages.jsp" %>
如果希望同时在列里面显示出错,加入<span class="fieldError"><html:errors property="user.name"/></span>
Pragmatic 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");//设置formuserForm.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");orreturn 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);
5. 终极化简--StrutsEntityAction
SpringSide封装的EnttiyCRUDAction,,每个包含了CRUD操作的Action仅需如下代码,详细请阅读SpringSide的Struts封装
public class UserAction extends StrutsEntityAction<User,UserManager> { private UserManager userManager; public void setUserManager(UserManager userManager) { this.userManager = userManager; } }
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2064431
发表评论
-
java.lang.NoClassDefFoundError: javax/el/ELException
2010-09-06 01:07 2615在maven中配置以下依赖: <depe ... -
配置过滤器
2009-12-28 12:04 1162配置过滤器,通过mapping ... -
关于div的隐藏
2009-12-28 12:01 1109div的visibility可以控制div的显示和隐藏,但是隐 ... -
request.getRealPath()的替代方法
2009-08-25 15:26 2910替代方法是: 写道 request.getSession( ... -
JSP注释详解(新手必看)
2009-07-03 14:14 1457在客户端显示一个注释. JSP 语法<!-- comme ... -
把JSP放到WEB-INF后以保护JSP源代码
2008-12-15 10:58 1637本人在看《J2EE核心模式》(“Core J2ee Patte ... -
struts配置文件中<forward>标签的redirect属性
2008-12-02 20:47 2404struts-config.xml中有这样 ... -
STRUTS中ec标签的用法
2008-11-25 16:41 25471.<ec:table items="pres ... -
JSP生成彩色验证码
2008-06-28 09:47 1265程序代码image.jsp<%@ page conten ... -
对表单输入的数据做校验
2008-05-23 20:11 1230对表单输入的数据做校验 在struts中带有了Jakarta ... -
newValue
2008-03-17 13:14 1424public List getAllList(String x ... -
web开发设计displaytag应用指南
2008-03-10 15:26 1549DisplayTag是一个非常好用的表格显示标签,适合MVC模 ... -
display table 标签用法
2008-03-10 15:25 5677在web.xml下添加一个filter <filte ... -
jstl之foreach循环
2008-03-10 15:04 1596<%@ page contentType="t ... -
JSTL1.1函数标签库(functions)如fn:length
2008-03-10 15:02 14420在jstl中的fn标签也是我 ... -
JSP Struts之HTML标签库详解
2008-03-10 15:00 1909Struts提供了五个标签库,即:HTML、Bean、Logi ... -
web.xml详解
2008-03-10 14:51 5558web.xml元素介绍 每一个站的WEB-INF下都有一个we ... -
Struts配置文件详解(3)
2008-03-10 14:50 1317<?xml version="1.0" ... -
Struts配置文件详解(2)
2008-03-10 14:49 1848关于 Struts中 struts-config.xml文件的 ... -
Struts配置文件详解(1)
2008-03-10 14:49 1324Struts应用采用两个基于X ...
相关推荐
传智博客__黎活明-struts2.ppt ,供学习配套视频
例如,Struts1中的Action通常会继承自`Action`类并重写`execute`方法,而Struts2则允许开发者创建任意类并使用注解或XML配置来定义Action行为。 其次,Struts2引入了拦截器(Interceptor)机制,这使得AOP(面向切...
例如,原来的Struts1中的Action类需要继承自Action类,而在Struts2中,开发者可以选择使用任何类作为Action,只需实现特定接口或使用注解即可。 其次,Struts2引入了拦截器(Interceptor)的概念,这使得AOP(面向...
除了理论知识外,该教学视频还可能会涉及一些实战案例,例如如何使用Struts2框架搭建一个简单的CRUD(Create、Read、Update、Delete)系统,以及如何处理用户登录、权限控制等功能。通过这些实践操作,可以帮助学习...
Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,由WebWork发展而来。它的出现是为了克服Struts1的一些局限性,提供更高效、灵活和可扩展的解决方案。Struts2的核心设计理念是无侵入式,这意味着...
那还等什么,本套视频教程从底层原理代码入手,循序渐进,透彻地向你展示了Spring 2.5的基本应用和各项新功能,清晰地讲解了如何使用Spring的最新和最优雅的方式来集成Struts,Struts2,Hibernate,JPA等流行的框架和...
【Java活学活用】 Java是一种广泛应用于网络开发的编程语言,尤其在网页设计中扮演着重要角色。Java以其跨平台、面向对象的特性,使得它成为构建动态、交互式网页的理想选择。以下是一些Java在网页设计中的关键知识...
那还等什么,本套视频教程从底层原理代码入手,循序渐进,透彻地向你展示了Spring 2.5的基本应用和各项新功能,清晰地讲解了如何使用Spring的最新和最优雅的方式来集成Struts,Struts2,Hibernate,JPA等流行的框架和...
Struts2是一个基于MVC(Model-View-Controller)架构的Java Web框架,它是在WebWork2的基础上发展起来的。与它的前身Struts1相比,...对于想要学习或提升Struts2技能的开发者,黎活明的PPT教程是一个很好的学习资源。
【标题】"黎活明 struts2 hibernate spring ppt"所涵盖的知识点主要涉及Java Web开发中的三个核心框架:Struts2、Hibernate和Spring。这是一系列由传智播客的黎活明老师主讲的PPT教程,旨在教授如何在实际项目中有效...
这个视频教程由黑马程序员提供,由黎活明主讲,旨在帮助开发者深入理解和掌握Struts2.1的核心概念和实际应用。 首先,从标题和描述我们可以了解到,本教程是关于Struts2.1的,它涵盖了从基础到进阶的多个主题。...
本资源“自学传智博客struts2-黎活明-源码-第02讲_02第一个struts2应用开发_DemoStruts2.rar”提供了黎活明老师在传智博客上讲解的第一个Struts2应用的开发示例,帮助初学者理解并实践Struts2的核心概念和使用方法。...
"传智播客_spring__黎活明(很经典).pdf"虽然不是直接关于Struts2,但Spring框架与Struts2常一起使用,构建松散耦合和模块化的应用程序。 多线程是并发编程的关键,"030901_【第9章:多线程】_认识多线程笔记.pdf"和...
在`黎活明_struts2教程.ppt`中,你将学习到如何创建Action类,配置Struts.xml文件,以及如何利用Interceptor拦截器实现业务逻辑。 2. **Spring2.5**: Spring是Java企业级应用的全能框架,它提供了依赖注入(DI)...
JSP视图则负责展示数据,通常使用Struts2的标签库,如`s:property`来显示Action返回的值。 在实际开发中,为了确保安全性和性能,我们需要关注以下几点: 1. 避免使用默认的Struts2拦截器栈,根据应用需求自定义...
黎活明老师的视频教程可能详细讲解了这些步骤,并提供了实际操作示例,帮助学习者理解并掌握在Struts2.1.8中指定多个配置文件的方法。通过这样的学习,开发者能够更好地管理Struts2应用的配置,提高开发效率和代码...
张孝祥老师的"传智播客-struts高级实战进阶"课程,将深入讲解Struts框架的使用和实践技巧,包括Action、Form Bean、Interceptor等核心概念。 其次,Hibernate是一个对象关系映射(ORM)框架,它简化了数据库操作,...
1.首先感谢黎活明老师提供的巴巴运动网开源程序,传智播客是个好机构; 2.本程序为闲暇之余改写,暂时定为(1),在原来struts1+jpa+spring的基础上转为struts2+hibernate+spring版本; 3.因为是抽时间写的,所以不...
6. **框架集成**:Spring对主流框架如Hibernate、JPA、Struts等有良好的集成,便于构建完整的应用。 **使用Spring的好处** 使用Spring框架可以极大地提高开发效率,减少代码量,并且使系统更加可维护。例如,通过...