现在用Struts2的人开始多起来,为CommonTemplate(
http://www.commontemplate.org/)加了一个与Struts2的集成方案,
Struts2(
http://struts.apache.org/2.x/)与Webwork一样,提供了模板输出hook,
所以集成是比较简单的,只需实现StrutsResultSupport的doExecute就行了。
下面是暂时的方案,有待调优。
package org.commontemplate.side.struts2;
import java.io.Writer;
import java.util.Locale;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import org.commontemplate.core.Context;
import org.commontemplate.core.Factory;
import org.commontemplate.core.TemplateException;
import org.commontemplate.engine.Engine;
import org.commontemplate.side.exception.HtmlTemplateExceptionHandler;
import org.commontemplate.side.map.ApplicationMap;
import org.commontemplate.side.map.ModelMap;
import org.commontemplate.side.map.RequestMap;
import org.commontemplate.side.map.SessionMap;
import org.commontemplate.standard.ConfigurationLoader;
import org.commontemplate.standard.ConfigurationSetting;
import org.commontemplate.standard.loader.WebappTemplateSourceLoader;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.LocaleProvider;
public class TemplateResult extends StrutsResultSupport {
private static final long serialVersionUID = 1L;
private Factory factory;
@Override
protected void doExecute(String finalLocation, ActionInvocation invocation)
throws Exception {
synchronized(this) {
if (this.factory == null) {
this.factory = initFactory();
}
}
Writer output = ServletActionContext.getResponse().getWriter();
Context context = null;
try {
context = factory.createContext(output, getLocale(invocation));
context.pushLocalContext("application", new ApplicationMap(ServletActionContext.getRequest().getSession().getServletContext()));
context.pushLocalContext("session", new SessionMap(ServletActionContext.getRequest()));
context.pushLocalContext("request", new RequestMap(ServletActionContext.getRequest()));
context.pushLocalContext(new ModelMap(invocation.getAction()));
factory.getTemplate(finalLocation).render(context);
} catch (TemplateException e) {
new HtmlTemplateExceptionHandler(output).handleTemplateException(e);
} finally {
try {
if (context != null)
context.clear();
output.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
protected Factory initFactory() {
ConfigurationSetting config = ConfigurationLoader.loadStandardConfiguration();
config.setTemplateSourceLoader(new WebappTemplateSourceLoader(ServletActionContext.getServletContext()));
return new Engine(config);
}
protected Locale getLocale(ActionInvocation invocation) {
if (invocation.getAction() instanceof LocaleProvider) {
return ((LocaleProvider) invocation.getAction()).getLocale();
} else {
return Locale.getDefault();
}
}
}
测试:
配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml" />
<package name="test" extends="struts-default">
<result-types>
<result-type name="commontemplate"
class="org.commontemplate.side.struts2.TemplateResult" />
</result-types>
<action name="index" class="com.xxx.IndexAction" method="index">
<result type="commontemplate">index.ctl</result>
</action>
</package>
</struts>
简单的index.ctl
<html>
<head>
</head>
<body>
$for{num : 1..9}
${num}
$end
</body>
</html>
分享到:
相关推荐
在Java Web开发中,将Struts2与Spring进行集成,可以充分利用两者的优势,实现更好的业务逻辑管理和控制流分离。集成过程主要包括以下几个步骤: 1. **引入依赖**:首先,在项目中添加Struts2和Spring的相关库,...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
集成Struts2和Shiro,我们可以利用Struts2的拦截器机制来插入Shiro的认证和授权逻辑。通常步骤如下: 1. 添加Shiro和Struts2的依赖库到项目中。 2. 配置Shiro的`shiro.ini`或Java配置,定义Realm并连接到数据源,...
集成Spring和Struts2的好处在于,Spring可以帮助管理Struts2的Action和业务逻辑,实现松耦合和更好的测试性。同时,Struts2的MVC模型和丰富的插件系统可以提供优雅的用户界面和交互控制。这样的结合,不仅提升了开发...
1. **配置CAS客户端库**:首先,你需要在项目中引入CAS的Java客户端库,如`cas-client-support-struts2`,这个库提供了与Struts2框架集成的适配器。 2. **配置web.xml**:在项目的`web.xml`文件中,我们需要配置CAS...
在实际开发中,这些文件会根据具体需求进行调整和扩展,确保Liferay与Struts 2的无缝集成,为用户提供高效、稳定的应用体验。 总之,Liferay 6与Struts 2的集成项目能够充分利用两者的优势,实现企业级门户的复杂...
java动态验证码Struts2集成实现
【基于MVC的移动代理与Struts2集成框架的研究与应用】 移动代理技术与Web开发框架的集成在解决互操作性问题上具有显著优势。传统C/S架构在面对快速变化的网络应用需求时显得力不从心,而移动代理技术以其智能、...
标题"Ireport4集成Struts2"涉及的是Java开发中两个重要的技术组件——iReport和Struts2的整合。iReport是JasperReports库的一个可视化设计工具,用于创建复杂的报表,而Struts2则是一个流行的MVC(模型-视图-控制器...
- 在集成环境中,单元测试和集成测试是必不可少的,可以使用JUnit和Mockito进行服务层测试,而Struts2提供的模拟请求工具(如Struts2TestCase)则帮助进行Action层的测试。 综上所述,"Spring+Struts的集成(第一种...
Struts2.3.7是Apache Struts框架的一个版本,这个框架主要用于构建基于Java的Web应用程序。集成测试在软件开发中扮演着至关重要...因此,理解和掌握Struts2的集成测试方法对任何使用该框架的开发者来说都是至关重要的。
struts2.2.3集成spring时需要添加的jar包,struts2-spring-plugin-2.2.3.jar
Struts2是一个流行的Java Web应用程序框架,用于构建...总的来说,这些库文件构成了Struts2集成JasperReport的基础,使得开发者可以在Web应用中轻松地创建和展现丰富的报表,同时利用Struts2的强大功能进行交互和控制。
**Struts2与Spring的集成** 主要是通过Spring插件实现,这使得Action类可以作为Spring的bean管理,实现依赖注入。这样,Action类可以直接注入服务层(Service)和DAO(数据访问对象)层的bean,简化了代码结构,增强...
本文将深入探讨如何利用Ibatis实现一对多关系、批处理、事务管理和与Spring及Struts2的集成。 首先,让我们来看一下“一对多”关系。在数据库设计中,一对多关系很常见,比如一个用户可以有多个订单。在Ibatis中,...
在描述中提到的"struts2集成包",即Struts2的JSON插件,是Struts2框架与JSON集成的关键,它允许Struts2的Action返回JSON格式的数据,从而实现与前端的AJAX交互。 `json-lib`是一个Java语言实现的JSON库,它提供了一...
在Struts2与Velocity集成的过程中,首先需要在Struts2的配置文件中指定Velocity作为视图解析器。这通常是在struts.xml文件中添加一个`<result>`标签,并设置类型为`velocity`,如下所示: ```xml ...
- Spring与Struts2集成,Spring可以作为Struts2的Action的依赖注入容器,通过Spring的ApplicationContext获取服务层对象,实现业务逻辑处理。 - Struts2与Hibernate集成,通常在Action中通过SessionFactory获取...
3. **Action配置**:在Struts2的配置文件(struts.xml)中,我们需要声明Action类,并指定它与Spring的Bean ID关联。这样,当请求到达时,Struts2会通过Spring获取到Action实例。 4. **Spring配置**:在Spring的配置...