- 浏览: 70660 次
- 性别:
- 来自: 绍兴
-
最新评论
struts的tiles插件是非常实用的,从某些方面可以很好的增加页面的灵活性,记得以前外包到华为开发portalone项目,其自行代码构造了类似tiles的插件并与后台数据库结合,页面的风格和布局完全由数据库控制,当时在里面一直研究他的代码,到最后也看的八九不离十了,主要也就是将页面分为频道->窗口->列的父子关系然后基于struts的标签来完成的,虽然最后也同样实现titles的功能,但是在我看来没特殊需求那样做完全没必要...扯远了,开始配置tiles插件.
首先添加所需要的包
然后在web.xml配置tiles监听
tiles对于action来说就是一个返回类型,也就是type,如"redirect"就是result的其中一个返回类型,我们配置重要的一步就是告诉struts有tiles这么一个类型,就可以说是注册一个类型,主要有两种方式
1.package直接继承"tiles-default"
tiles-default是tiles提供默认的包,他本身已拥有tiles类型,来看看源配置
2.在包内手动注册tiles类型
配置好类型以后我们就要用tiles给我们的约定来创建页面了,我们在WEB-INF下创建tiles.xml
layout.jsp是我的一个模板页面,tiles框架测试我讲用他来作为页面的地址,leftMenu.jsp是我的左边菜单页面,head 和 footer 是我页面的头部和底部,在我的工程里大部分页面 这三个页面都是固定的,只有右边部分是需要动态改变的,所以重点就是<put-attribute name="body" value="" />这句,我们没有对body添加页面,因为它是动态的需要我们在代码里面对它进行赋值,我们再来看看layout.jsp里面的代码
只是一个简单的布局页面,美工可以尽情发挥,和程序员不干扰
最后就是编码过程中的使用了,看代码
这个是我提出的公共方法,一般放在action的父类里,这里方便起见我直接放在action里了,这个方法告诉tiles某key的值是什么,根据tiles.xml的配置,我们需要对body进行赋值,看代码
先添加了一个result,指定的local为tiles里配置的definition的name,然后我在say方法里对body进行赋值/hello.jsp,return"onPage"这个result,这样tiles监听会自动找到layout.jsp组装过后来返回了...
其实配置方式非常简单,只不过想说细一点而已....
补充struts的json插件,原理跟tiles几乎一致
首先欠佳jar包
为package配置result类型
java代码
result为返回的模型,json-plugin会自动帮我们转成json格式的数据,注意配置result时,parames中root 配置的参数名称 要与 list的名称一致 也就是result,并且result必须生成get set方法
首先添加所需要的包
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-tiles-plugin</artifactId> <version>2.1.8.1</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-core</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-api</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.apache.tiles</groupId> <artifactId>tiles-jsp</artifactId> <version>2.1.4</version> </dependency>
然后在web.xml配置tiles监听
<listener> <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class> </listener>
tiles对于action来说就是一个返回类型,也就是type,如"redirect"就是result的其中一个返回类型,我们配置重要的一步就是告诉struts有tiles这么一个类型,就可以说是注册一个类型,主要有两种方式
1.package直接继承"tiles-default"
<package name="crud-default" extends="tiles-default"> </package>
tiles-default是tiles提供默认的包,他本身已拥有tiles类型,来看看源配置
<struts> <package name="tiles-default" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/> </result-types> </package> </struts>
2.在包内手动注册tiles类型
<package name="crud-default" extends="struts-default"> <result-types> <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> </result-types> </package>
配置好类型以后我们就要用tiles给我们的约定来创建页面了,我们在WEB-INF下创建tiles.xml
<tiles-definitions> <definition name="hello" template="/WEB-INF/layout/layout.jsp"> <put-attribute name="title" value="tiles框架测试" /> <put-attribute name="leftmenu" value="/WEB-INF/layout/leftMenu.jsp" /> <put-attribute name="head" value="/WEB-INF/layout/head.jsp" /> <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" /> <put-attribute name="body" value="" /> </definition> </tiles-definitions>
layout.jsp是我的一个模板页面,tiles框架测试我讲用他来作为页面的地址,leftMenu.jsp是我的左边菜单页面,head 和 footer 是我页面的头部和底部,在我的工程里大部分页面 这三个页面都是固定的,只有右边部分是需要动态改变的,所以重点就是<put-attribute name="body" value="" />这句,我们没有对body添加页面,因为它是动态的需要我们在代码里面对它进行赋值,我们再来看看layout.jsp里面的代码
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title><tiles:getAsString name="title"/></title> </head> <body> <div class="head"> <tiles:insertAttribute name="head"/> </div> <div class="leftMenu"> <tiles:insertAttribute name="leftMenu"/> </div> <div class="body"> <tiles:insertAttribute name="body"/> </div> <div class="footer"> <tiles:insertAttribute name="footer"/> </div> </body> </html>
只是一个简单的布局页面,美工可以尽情发挥,和程序员不干扰
最后就是编码过程中的使用了,看代码
public void setTemplate(String key,String path){ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); TilesContainer container = ServletUtil.getCurrentContainer(request, request.getSession().getServletContext()); AttributeContext context = container.startContext(request,response); context.putAttribute(key, new Attribute("/WEB-INF/content/"+path)); }
这个是我提出的公共方法,一般放在action的父类里,这里方便起见我直接放在action里了,这个方法告诉tiles某key的值是什么,根据tiles.xml的配置,我们需要对body进行赋值,看代码
@Namespace("/test") @Results({@Result(name = "onePage", location = "hello", type = "tiles")}) public class HelloAction extends ActionSupport { public String say(){ this.setTemplate("body", "/hello.jsp"); return "onePage"; } public void setTemplate(String key,String path){ HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); TilesContainer container = ServletUtil.getCurrentContainer(request, request.getSession().getServletContext()); AttributeContext context = container.startContext(request,response); context.putAttribute(key, new Attribute("/WEB-INF/content/"+path)); } }
先添加了一个result,指定的local为tiles里配置的definition的name,然后我在say方法里对body进行赋值/hello.jsp,return"onPage"这个result,这样tiles监听会自动找到layout.jsp组装过后来返回了...
其实配置方式非常简单,只不过想说细一点而已....
补充struts的json插件,原理跟tiles几乎一致
首先欠佳jar包
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-json-plugin</artifactId> <version>2.2.1</version> </dependency>
为package配置result类型
<result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult" /> </result-types>
java代码
private List<Object> result = new ArrayList<Object>(); @Action(value = "syaByJson", results = { @Result(name = "json", type = "json", params = { "root", "result" }) }) public String sayByJson() { result.add(true); return "json"; }
result为返回的模型,json-plugin会自动帮我们转成json格式的数据,注意配置result时,parames中root 配置的参数名称 要与 list的名称一致 也就是result,并且result必须生成get set方法
发表评论
-
Web开发学习13聊聊java反射
2016-07-12 18:41 788很喜欢一本叫《走出软件作坊》的书,其中有一句话让我较为深刻,“ ... -
Web开发学习12 浅谈设计模式
2016-07-01 13:33 1345在我刚接触 ... -
Web开发学习11 全局缓存控制
2015-10-12 14:27 762缓存用的好可以减少数据库的压力,在大并发的情况下极大的提升服务 ... -
Web开发学习10 hadoop实战
2015-10-09 14:02 795前一篇说到项目记录了很多埋点日志,当有一天项目需求需要对这些日 ... -
Web开发学习(9)全局埋点
2015-07-27 11:10 2073埋点的作用是把客户端每次访问服务端的操作记录下来,包括请求连接 ... -
Web开发学习8Struts2基类封装
2015-07-24 12:03 730一个好的基类可以帮助开发者减少很多开发工作,像我这种爱偷懒的人 ... -
Web开发学习7按钮级别权限控制
2015-07-23 16:21 13460这个功能的思路是自己原创的,没看过其他例子,其实是在做之前网上 ... -
Web开发学习6添加liqiubase
2015-07-22 14:29 1529开发过程中经常碰到数据库更改的情况,在日常环境下如果每位开发人 ... -
浅列JavaEnum
2014-01-05 16:42 817enum Province{ ZHEJIANG,SHANGHA ... -
maven常用命令
2013-07-08 10:20 8211、创建普通Java项目: ... -
canvas绘制科赫雪花
2012-12-20 17:24 2187<html> <head> ... -
html5 audio与video方法属性事件概括
2012-12-20 14:46 1152play() 继续播放 pause() ... -
spring 整合mina
2012-12-20 11:48 1146首先定义自定义过滤器 <bean id=" ... -
Web开发学习(5)添加springsecurity应用
2011-12-14 15:00 1015我学习公司这个架构多半就是为了把springsecurity搞 ... -
Web开发学习(4)添加spring应用
2011-12-14 14:45 824印象中似乎没做过不用spring的项目,因为它在web开发中的 ... -
使用线程删除导出临时文件
2011-12-01 16:33 2301项目支持大数据量导出e ... -
jQuery实现表格行点击选中复选框
2011-11-23 12:36 6031这个需求是在项目完成后客户提出的要求,看似简单但是还需要一点小 ... -
Web开发学习(2)配置convention插件
2011-11-04 10:28 1431注解的方式某些程度上能减少xml的配置量,个人感觉使程序更加清 ... -
Web开发学习(1)使用eclipse搭建maven项目
2011-10-20 10:04 5778首先用eclipse创建工程 ne ... -
数据库连接泛型基类创建
2011-06-30 11:49 1016记录 以便以后参考---- 基类代码 public cl ...
相关推荐
6. **插件体系**:Struts2有一个强大的插件架构,如Tiles、JSON、Struts2 Dojo等,这些插件可以方便地扩展框架功能,以满足不同需求。 7. **ActionContext**:在每个请求中,ActionContext对象封装了当前请求的上...
5. **插件(Plugins)**:Struts2有众多插件,如Freemarker、Tiles、Struts2 jQuery等,这些插件扩展了Struts2的功能,使得开发更加便捷。例如,Freemarker插件提供了模板引擎,便于生成动态HTML,而Struts2 jQuery...
7. **插件机制**:Struts2提供了丰富的插件,如Ajax支持、JSON响应、文件上传等,使得开发更加灵活。 通过《轻松掌握Struts2》的源码,你可以: 1. **学习Action的编写**:查看书中各个案例的Action类,了解如何...
6. **插件系统**:Struts2拥有丰富的插件库,如Tiles、JSON、Ajax支持等,这些插件能快速集成进项目,实现特定功能。 7. **国际化(i18n)**:Struts2提供内置的国际化支持,通过资源包(.properties文件)轻松实现...
- Struts2的JSON插件或Interceptor实现Action的JSON输出,便于Ext JS Grid的异步操作。 - 在Action中设置相应的返回值,例如操作成功返回'success',错误返回'error',并附带必要的信息。 6. **异常处理和验证**...