【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.3
作者: hzboy192@192.com
Blog: http://my.csdn.net/peng_hao1988
版本总览:http://blog.csdn.net/peng_hao1988/article/details/9026897
实现步骤:
一、OGNL(对象导航、方法调用、集合对象)
(1)OGNL对象导航
<!-- 访问action中的属性直接使用属性名称 -->
<s:iterator var="user" value="users">
<tr align="center" height="24px">
<td width="100">
<!-- 访问非root级属性必须使用# -->
<s:property value="#user.id"/>
</td>
<td width="160"><s:property value="#user.uname"/></td>
<td width="70"><s:property value="#user.sex"/></td>
<td width="150"><s:property value="#user.telphone"/></td>
<td width="300"><s:property value="#user.address"/></td>
<td width="120">
<a href="edit.action?param=0&id=<s:property value="#user.id"/>">
<s:text name="edt"/>
</a>
<a href="delete.action?id=<s:property value="#user.id"/>"><s:text name="del"/></a>
</td>
</tr>
</s:iterator>
(2).方法调用,集合对象
<body>
<div style="margin-left:auto 10px;">
<ul style="list-style:none">
<li><b>OGNL 方法调用测试</b></li>
<li>
调用普通类中的方法:<s:property value="#session.userinfo.getUname()"/>
</li>
<li>
<!--
这里因为没有通过action转向过来,所以看到效果,这里的add()方法为定向到该页面的action中的方法 ,有兴趣的
同学可以自己试一下。
-->
调用Action类中的方法:<s:property value="add()"/>
</li>
<li>
<!-- 这里成功的前提是已经配置了struts2 OGNL允许访问静态方法 -->
调用普通类中的静态方法:<s:property value="@com.hzboy.common.Global@showMessage()"/>
</li>
<li>
<!-- 属性必须为public -->
调用普通类中的静态属性:<s:property value="@com.hzboy.common.Global@SESSION_USER_INFO"/>
</li>
<li>
<!-- 属性必须为public -->
调用普通类中构造方法:<s:property value="new com.hzboy.orm.Userinfo()"/>
</li>
<li>
调用JDK类库的方法:<s:property value="@java.util.Calendar@getInstance()"/>
</li>
<li>
调用JDK类库的Math方法:<s:property value="@@random()"/>
</li> <li><br/><b>OGNL 访问集合类测试</b></li>
<li>
访问Userinfo List集合:<s:property value="@com.hzboy.common.Global@getUsers()"/>
</li>
<li>
访问Userinfo List集合中某个对象:<s:property value="@com.hzboy.common.Global@getUsers()[1]"/>
</li>
<li>
访问Userinfo List集合中某属性集合:<s:property value="@com.hzboy.common.Global@getUsers().{uname}"/>
</li>
<li>
访问Userinfo List集合中某属性集合中的某个对象:<s:property value="@com.hzboy.common.Global@getUsers().{uname}[2]"/>
</li> <li>
访问City Set集合:<s:property value="@com.hzboy.common.Global@getCities()"/>
</li>
<li>
<!-- set是无须的不能通过下标访问,无法获取到值 -->
访问City Set集合中某个对象:<s:property value="@com.hzboy.common.Global@getCities()[1]"/>
</li> <li>
访问City Map集合:<s:property value="@com.hzboy.common.Global@getCitiesMap()"/>
</li>
<li>
访问City Map集合中key集合:<s:property value="@com.hzboy.common.Global@getCitiesMap().keys"/>
</li>
<li>
访问City Map集合中value集合:<s:property value="@com.hzboy.common.Global@getCitiesMap().values"/>
</li>
<li>
<!-- []中为key值,字符串用单引号引起来 -->
访问City Map集合中某个key映射的对象:<s:property value="@com.hzboy.common.Global@getCitiesMap()[2]"/>
</li> <li>
访问Userinfo List集合:<s:property value="@com.hzboy.common.Global@getUsers().size()"/>
</li>
<li>
访问City Set集合的大小:<s:property value="@com.hzboy.common.Global@getCities().size()"/>
</li>
<li>
访问City Map集合的大小:<s:property value="@com.hzboy.common.Global@getCitiesMap().size()"/>
</li> <li><br/><b>OGNL 投影和选择测试</b></li>
<li>
获得所有用户中的所有男性用户:<s:property value="@com.hzboy.common.Global@getUsers().{?#this.sex=='man'}"/>
</li>
<li>
获得所有用户中的所有男性用户的名字:<s:property value="@com.hzboy.common.Global@getUsers().{?#this.sex=='man'}.{uname}"/>
</li>
<li>
获得所有用户中的第一个男性用户[0]:<s:property value="@com.hzboy.common.Global@getUsers().{?#this.sex=='man'}[0]"/>
</li>
<li>
获得所有用户中的第一个男性用户[^]:<s:property value="@com.hzboy.common.Global@getUsers().{^#this.sex=='man'}"/>
</li>
<li>
获得所有用户中的第最后一个男性用户[$]:<s:property value="@com.hzboy.common.Global@getUsers().{$#this.sex=='man'}"/>
</li>
<li>
获得所有用户中的第一个男性用户的名字:<s:property value="@com.hzboy.common.Global@getUsers().{?#this.sex=='man'}[0].{uname}"/>
</li>
</ul>
</div>
</body>
二、高级action(动态action)
(1)、配置无效action的处理方式一:
<!-- 默认资源找不到(在地址栏随意写xxx.action访问系统),只能拦截无效action,无法处理jsp的请求,jsp需要在web.xml
中配置error-page -->
<default-action-ref name="notfound"/> <action name="notfound">
<result>/WEB-INF/jsp/404.jsp</result>
</action>
(2)、配置无效action的处理方式二:
<package name="error" extends="default">
<!-- 捕获无法匹配的action,*可以匹配当前路径下所有没有找到的action,××可以匹配当前及下级没有找到的action -->
<action name="**">
<result>/WEB-INF/jsp/404.jsp</result>
</action>
</package>
(3)、只配置action类,不映射到method,然后通过指明方法名称来调用类中的方法处理请求:
<!--
<action name="query" class="userAct" method="doQuery">
<result name="query">/WEB-INF/jsp/success.jsp</result>
</action> <action name="edit" class="userAct" method="doEdit">
<result name="editUser">/WEB-INF/jsp/editUser.jsp</result>
</action> <action name="add" class="userAct" method="doAdd">
<result name="addUser">/WEB-INF/jsp/addUser.jsp</result>
</action>
-->
<!-- 将原有的action映射到userAct方法的action去掉method属性,然后通过user!methodName.action访问发送 -->
<action name="user" class="userAct">
<result name="query">/WEB-INF/jsp/success.jsp</result>
<result name="editUser">/WEB-INF/jsp/editUser.jsp</result>
<result name="addUser">/WEB-INF/jsp/addUser.jsp</result>
</action>
(4)、使用通配符配置action:
参见:struts2通配符配置
三、拦截器(MethodFilterIntercepter)
(1)、配置方法拦截器
<!-- 继承MethodFilterIntercepter类 -->
<interceptor name="delInterceptor" class="com.hzboy.common.DelInterceptor"/>
<!-- 定义拦截器拦截规则 -->
<interceptor-ref name="delInterceptors">
<!-- 在给拦截器栈添加参数时需要指定拦截器的名称 -->
<param name="delInterceptor.includeMethods">doDelete*</param>
<param name="loginInterceptor.excludeMethods">doQuery*</param>
</interceptor-ref>
(2)、配置action返回result时拦截
A.新建BefureResultInterceptor继承PreResultListener。
B.在Interceptor中注册监听器ai.addPreResultListener(new BeforeResultIntercepor());
(3)、处理表单重复提交
A.在表单中添加<s:token></s:token>
B.在需要处理重复提交的action中添加拦截器<interceptor-ref name="token"/>
C.配置重复提交时的处理页面,name值为固定值invalid.token。
如:<result name="invalid.token">/xxx.jsp</result>
示例代码:http://download.csdn.net/detail/peng_hao1988/5929485
》》》》》》》》》》》》》》》》转载请注明出处《《《《《《《《《《《《《《《《
【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.3的更多相关文章
- 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.2
作者: hzboy192@192.com Blog: http://my.csdn.net/peng_hao1988 版本总览:http://blog.csdn.net/peng_hao1988/ar ...
- Struts2.0+Spring3+Hibernate3(SSH~Demo)
Struts2.0+Spring3+Hibernate3(SSH~Demo) 前言:整理一些集成框架,发现网上都是一些半成品,都是共享一部分出来(确实让人很纠结),这是整理了一份SSH的测试案例,完全 ...
- MyEclipse搭建SSH(Struts2+Spring2+Hibernate3)框架项目教程
对Struts.spring.hibernate大体上了解一遍后,就是针对这个几个框架的整合了. 怎样整合,请看以下: 第一:Struts2的jar和xml配置文件: jar包: commons-fi ...
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- Spring+Hibernate+Struts(SSH)框架整合
SSH框架整合 前言:有人说,现在还是流行主流框架,SSM都出来很久了,更不要说SSH.我不以为然.现在许多公司所用的老项目还是ssh,如果改成流行框架,需要成本.比如金融IT这一块,数据库dao层还 ...
- SSH框架整合过程总结
---------------------siwuxie095 SSH 框架整合过程总结 (一)导入相关 jar 包(共 ...
- SSH框架整合思想
--------------------siwuxie095 SSH 框架整合思想 1.SSH 框架,即 Struts2 ...
- SSH 框架整合总结
1. 搭建Struts2 环境 创建 struts2 的配置文件: struts.xml; 在 web.xml 中配置 struts2 的核心过滤器; // struts.xml <?xml v ...
- dwr与ssh框架整合教程
(1)dwr与ssh框架整合教程dwr框架介绍. DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,可以帮助开 发人员开发包含AJ ...
随机推荐
- centos 软件安装 删除
centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令 类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装 类似[ubuntu ...
- github配置和git学习
参考:http://www.eoeandroid.com/thread-272837-1-1.html http://blog.csdn.net/hcbbt/article/details/11651 ...
- 如何查看MySQL中每张表占用的空间大小
如题,找到MySQL中的information_schema表,这张表记录了所有数据库中表的信息,主要字段含义如下: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE: ...
- Navigation bar 的注意事项
Navigation bar 的注意事项 Bar button item 使用 button 作为 custom view,初始化 isEnabled 为 false,注意顺序 需要设置 bar bu ...
- C技巧:结构体参数转成不定参数
下面这段程序是一个C语言的小技巧,其展示了如何把一个参数为结构体的函数转成一个可变参数的函数,其中用到了宏和内建宏"__VA_ARGS__",下面这段程序可以在GCC下正常编译通过 ...
- 李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档
李洪强iOS开发之-环信02.1_环信 SDK 2.x到3.0升级文档 SDK 2.x 至 3.0 升级指南 环信 SDK 3.0 升级文档 3.0 中的核心类为 EMClient 类,通过 EMCl ...
- OA学习笔记-010-Struts部分源码分析、Intercepter、ModelDriver、OGNL、EL
一.分析 二. 1.OGNL 在访问action前,要经过各种intercepter,其中ParameterFilterInterceptor会把各咱参数放到ValueStack里,从而使OGNL可以 ...
- win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程
微软发布win10正式版已经过去几天了,相信很多同学都心情高涨的装上了期待已久的win10系统,但也有很多同学面对win10系统的众多版本感到一脸茫然,的确,微软在win10系统版本上的划分确实有点多 ...
- Excel列表部分列表隐藏与取消隐藏
Excel列表部分列表隐藏与取消隐藏 2014-2-19 隐藏:选中需要隐藏的列(选中A.B.C....),右键单击所选部分,选择"隐藏"即可. 取消隐藏:从A选中至所见表格最后的 ...
- Linux 命令备注
linux 命令常用备注. 查看某文件大小,du -sk filename; 查看详细信息 ls -l; 查看系统分区 df -h; 查看系统信息 uname -a; 查看系统名称 hostname; ...