`

Struts2和Freemarker整合参数

    博客分类:
  • J2EE
阅读更多

 

struts2对freemarker有支持。

在response里可以通过加参数来指定显示模式为freemarker

分析下:

 <action name=”staticViewAction” class=”com.mobilesoft.esales.webapp.action.StaticViewtAction”>
            <result name=”success” type=”staticview”>
                <param name=”location”>test/freemarkertest.ftl</param>
                <param name=”contentType”>text/html</param>
                 <param name=”fileName”>${filename}</param>
                <param name=”staticTemplate”>test/freemarkertest.ftl</param>
                <param name=”filePath”>static</param>
            </result>                    
    </action>
 
 

 

可能是继承重写方法:

在org.apache.struts2.views.freemarker.FreemarkerResult.java

中,只有location和pContentType属性.

ackage com.mobilesoft.esales.webapp.action; 
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Locale; 
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.util.ResourceUtil; 
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.LocaleProvider;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.ValueStack; 
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException; 
public class FreemarkerResult extends StrutsResultSupport { 
    private static final long serialVersionUID = -3778230771704661631L; 
    protected ActionInvocation invocation;
    protected Configuration configuration;
    protected ObjectWrapper wrapper;
    protected FreemarkerManager freemarkerManager;
    private Writer writer;
    protected String location;
    private String pContentType = “text/html”; 
    protected String fileName; // 要生成的静态页面名称
    protected String filePath; // 要生成的静态页面的路径
    protected String staticTemplate; // 用于生成静态页面Freemarker模板的路径 
    public FreemarkerResult() {
        super();
    } 
    public FreemarkerResult(String location) {
        super(location);
    } 
    @Inject
    public void setFreemarkerManager(FreemarkerManager mgr) {
        this.freemarkerManager = mgr;
    } 
    public void setContentType(String aContentType) {
        pContentType = aContentType;
    } 
    public String getContentType() {
        return pContentType;
    } 
    public void doExecute(String location, ActionInvocation invocation)
            throws IOException, TemplateException {
        this.location = location;
        this.invocation = invocation;
        this.configuration = getConfiguration();
        this.wrapper = getObjectWrapper(); 
        this.fileName = (String) conditionalParse(fileName, invocation);
        this.staticTemplate = (String) conditionalParse(staticTemplate, invocation);
        this.filePath = ((String) conditionalParse(filePath, invocation)) == null ? “”
                : ((String) conditionalParse(filePath, invocation)); 
        if (!location.startsWith(”/”)) {
            ActionContext ctx = invocation.getInvocationContext();
            HttpServletRequest req = (HttpServletRequest) ctx
                    .get(ServletActionContext.HTTP_REQUEST);
            String base = ResourceUtil.getResourceBase(req);
            location = base + “/” + location;
        } 
        //生成html页面的模板类
        Template template = configuration.getTemplate(location, deduceLocale());
        // 生成静态页面的的模板类
        Template staticTemplate = configuration.getTemplate(this.staticTemplate,
                deduceLocale()); 
        TemplateModel model = createModel();
        String path = ServletActionContext.getServletContext().getRealPath(
                filePath)
                + File.separator;
        Writer out = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(path + fileName))); 
        if (preTemplateProcess(template, model)) {
            try {
                staticTemplate.process(model, out);
                template.process(model, getWriter());
            } finally {
                postTemplateProcess(template, model);
                postTemplateProcess(staticTemplate, model);
            }
        }
    } 
    protected Configuration getConfiguration() throws TemplateException {
        return freemarkerManager.getConfiguration(ServletActionContext
                .getServletContext());
    } 
    protected ObjectWrapper getObjectWrapper() {
        return configuration.getObjectWrapper();
    } 
    public void setWriter(Writer writer) {
        this.writer = writer;
    } 
    protected Writer getWriter() throws IOException {
        if (writer != null) {
            return writer;
        }
        return ServletActionContext.getResponse().getWriter();
    } 
    protected TemplateModel createModel() throws TemplateModelException {
        ServletContext servletContext = ServletActionContext
                .getServletContext();
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ValueStack stack = ServletActionContext.getContext().getValueStack(); 
        Object action = null;
        if (invocation != null)
            action = invocation.getAction(); // Added for NullPointException
        return freemarkerManager.buildTemplateModel(stack, action,
                servletContext, request, response, wrapper);
    } 
    protected Locale deduceLocale() {
        if (invocation.getAction() instanceof LocaleProvider) {
            return ((LocaleProvider) invocation.getAction()).getLocale();
        } else {
            return configuration.getLocale();
        }
    } 
    protected void postTemplateProcess(Template template, TemplateModel data)
            throws IOException {
    } 
    protected boolean preTemplateProcess(Template template, TemplateModel model)
            throws IOException {
        Object attrContentType = template.getCustomAttribute(”content_type”); 
        if (attrContentType != null) {
            ServletActionContext.getResponse().setContentType(
                    attrContentType.toString());
        } else {
            String contentType = getContentType(); 
            if (contentType == null) {
                contentType = “text/html”;
            } 
            String encoding = template.getEncoding(); 
            if (encoding != null) {
                contentType = contentType + “; charset=” + encoding;
            } 
            ServletActionContext.getResponse().setContentType(contentType);
        } 
        return true;
    } 
    public String getFileName() {
        return fileName;
    } 
    public void setFileName(String fileName) {
        this.fileName = fileName;
    } 
    public String getFilePath() {
        return filePath;
    } 
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    } 
    public String getStaticTemplate() {
        return staticTemplate;
    } 
    public void setStaticTemplate(String staticTemplate) {
        this.staticTemplate = staticTemplate;
    }
}
 

 

分享到:
评论

相关推荐

    Struts2与Freemarker的配置方法

    Struts2和Freemarker是Java Web开发中的两个重要组件,它们在构建MVC(Model-View-Controller)架构的应用程序中发挥着关键作用。Struts2作为一个强大的MVC框架,负责处理请求、控制应用程序流程,而Freemarker则是...

    struts2和mybatis整合

    通过以上步骤,Struts2和MyBatis的整合可以让我们在处理复杂的业务逻辑时,既能充分利用Struts2的控制能力,又能享受到MyBatis带来的数据库操作便利。这种整合方式降低了系统的耦合度,提高了代码的可维护性和可扩展...

    struts2整合fileupload

    在本项目中,我们看到Struts2还整合了Freemarker作为视图模板引擎,使得前后端数据交互更加方便。 首先,让我们深入了解一下Struts2的FileUpload整合。Struts2提供了`struts2-upload-plugin`插件来支持文件上传。要...

    jquery与struts2整合

    将jQuery与Struts2整合可以使前端与后端的数据交互变得更加高效和便捷。下面我们将详细讲解如何实现这一整合。 **1. 环境配置** 在整合jQuery和Struts2之前,我们需要确保所有的依赖库已经正确地引入到项目中。关键...

    struts2 spring hibernate 整合架构

    总之,Struts2、Spring和Hibernate的整合为Java Web开发提供了一个强大的工具集,能够处理复杂的业务逻辑,实现松耦合的架构。理解并掌握这三个框架的原理和整合方式,对于提升开发效率和代码质量具有重要意义。

    struts2和hibernate的整合

    在Java Web开发中,整合Struts2和Hibernate可以帮助开发者更有效地管理和操作数据,提高开发效率。 Struts2是一个强大的MVC框架,它提供了一种组织和管理Web应用逻辑的方式。它通过拦截器来处理请求,使得业务逻辑...

    struts2+hibernate+spring框架整合实列

    5. **整合Struts2和Spring**:使用Spring的Struts2插件,这样Struts2的动作类可以从Spring容器中获取bean,实现依赖注入。在struts.xml配置文件中,通过`&lt;plug-in&gt;`标签引入Spring插件。 6. **动作类和业务逻辑**:...

    Struts2, Spring与myBatis整合示例项目

    Struts2和MyBatis的配置信息通常会整合到Spring的配置文件中,以实现整体的统一管理和控制。 项目结构通常如下: - src/main/java:存放业务逻辑类、DAO接口及实现、Struts2 Action类。 - src/main/resources:存放...

    spring 3 + mybaits3 + struts2 + mysql 整合框架

    在IT行业中,构建高效、可维护的企业级应用是至关重要的,而Spring、MyBatis、Struts2和MySQL这四个组件的整合框架就是一个常见的选择。这个框架组合提供了模型-视图-控制器(MVC)架构模式,数据持久化,以及灵活的...

    Struts2+Spring3+Hibernate4必备整合包

    Struts2支持多种模板技术,如FreeMarker和JSP,能够轻松实现动态页面渲染。 Spring3是全面的企业级应用框架,它在业务层提供了依赖注入(DI)和面向切面编程(AOP)的能力,帮助开发者管理对象的生命周期和装配。...

    struts2主要jar包

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它由Apache软件基金会维护。在Java EE应用开发中,Struts2...例如,如果项目涉及Spring或Hibernate整合,还需要相应的Struts2整合插件。

    struts2 hibernate spring 整合、分页源码

    整合过程中,Spring通常作为核心容器,管理其他组件,包括Struts2和Hibernate。Struts2的动作调度和拦截器机制与Spring的AOP相结合,可以实现细粒度的权限控制和日志记录。而Hibernate作为持久层框架,可以通过...

    SSH整合 Struts2.1+Spring4.1+Hibernate4.1

    SSH整合是指将Struts2、Spring和Hibernate这三个流行的开源Java框架集成在一起,以构建高效、模块化的企业级Web应用程序。这个“SSH整合 Struts2.1+Spring4.1+Hibernate4.1”是一个预配置的框架模板,适用于快速开发...

    Spring4+hibernate4+struts2整合

    SSH4整合是指将Spring4、Hibernate4和Struts2集成在一起,以实现一个高效、灵活且可维护的Web应用程序。下面我们将深入探讨这三个框架的核心功能及其整合过程。 **Spring框架** Spring是Java企业级应用的基石,它...

    struts2整合hibernate的网上商城源码

    Struts2 和 Hibernate 是两种非常流行的开源框架,它们在...通过分析这个源码,开发者不仅可以学习到如何整合Struts2和Hibernate,还可以深入了解MVC架构以及Java Web开发的基本流程。这有助于提升实际项目开发能力。

    struts2,spring3,mybatis整合图书

    Struts2、Spring3和MyBatis是Java开发中常用的三大...以上就是关于Struts2、Spring3和MyBatis整合以及在图书管理系统中的应用的详细介绍,这个整合方案提供了强大的功能和良好的架构,适用于大多数企业级Java Web项目。

    图解MyEclipse配置struts+hibernate+spring+FreeMarker.rar

    2. 引入框架:通过Maven或手动方式导入Struts、Hibernate、Spring和FreeMarker的相关库。 3. 配置web.xml:添加四大框架的初始化参数和过滤器,确保它们能正确启动。 4. 定义模型和数据访问层:使用Hibernate创建...

    struts2所有jar包

    4. **Struts2兼容性库**:对于与其他框架如Spring、Hibernate的整合,可能还需要如`struts2-spring-plugin.jar` 和 `struts2-hibernate-plugin.jar`。 5. **国际化和本地化支持**:`struts2-i18n-plugin.jar` 提供...

    深入浅出Struts2.pdf

    总之,“深入浅出Struts2”这份资料全面讲解了Struts2的各个关键组成部分,包括其工作原理、配置方式、拦截器机制、OGNL表达式、插件使用以及与Spring的整合,是学习和掌握Struts2框架的宝贵资源。通过深入学习和...

Global site tag (gtag.js) - Google Analytics