`

给webwork或者struts2添加freemarker宏(taglibrary)

阅读更多

http://huaco.3322.org/blog/?p=19

 

给webwork或者struts2添加freemarker宏(taglibrary)

大家是否发现做webwork开发,使用freemarker模板的时候,freemarker的宏很好用呢,类似这样<@ww.text name=”${message}”/>的代码在freemarker文件中随处可见,这样的宏都是由webwork带来的,那我们自己做的一些公用的宏如何添加到我们的类库上,方便自己的使用呢。经过对freemarker宏的了解和webwork给action提供的model,我们发现这个做起来非常简单。

首先是个宏的集合,在webwork中是WebWorkModels,FreemarkerResult把这个类放到了freemarker的数据模型中,代码在FreemarkerManager中如下

model.put(”ww”, new WebWorkModels(stack, request, response));

然后我们把一些自己写的宏根据webwork的写法做好,比如我们要建立一个message的宏,代码如下

package ××××××;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.opensymphony.webwork.components.Component;
import com.opensymphony.webwork.views.freemarker.tags.TagModel;
import com.opensymphony.xwork.util.OgnlValueStack;

public class MessageModel extends TagModel {

public MessageModel(OgnlValueStack stack, HttpServletRequest req, HttpServletResponse res) {
super(stack, req, res);
}

@Override
protected Component getBean() {
return new Message(stack,req,res);
}

}

在同一个包下,写一个message的类 代码如下
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.infowarelab.pso.common.web.models.AbstractPsoUiBean;
import com.opensymphony.xwork.util.OgnlValueStack;

public class Message extends AbstractPsoUiBean {

public Message(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
super(stack, request, response);
}

@Override
protected String getDefaultTemplate() {
return “message”;
}

}

创建我们自己的宏集合类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.opensymphony.xwork.util.OgnlValueStack;

public class PsoModels {
private OgnlValueStack stack;
private HttpServletRequest request;
private HttpServletResponse response;
private MessageModel message;

public PsoModels(OgnlValueStack stack, HttpServletRequest request, HttpServletResponse response) {
this.stack = stack;
this.request = request;
this.response = response;
}

public MessageModel getMessage() {
if (message == null) {
message = new MessageModel(stack, request, response);
}
return message;
}
}

再创建这个宏所用到的模板文件,在classpath下的template.xhtml目录下,名称见getDefaultTemplate方法返回值代码如下

you message and any freemarker syntax

最后要在一个base的action中把这个models放到数据模型中,一般会在prepare方法中实现

public void prepare() throws Exception {
HttpServletRequest req = ServletActionContext.getRequest();
OgnlValueStack stack = ServletActionContext.getValueStack(req);
HttpServletResponse res = ServletActionContext.getResponse();
stack.getContext().put(”pso”,
new PsoModels(stack, req, res));
}

在struts2中,创建models的方法是一致的,加载也可以这样做,但是有更好的方法,得益于struts2的修改过的plugin模型,只要做一个struts-plugin.xml以及一个实现TagLibrary接口的类

实现如下

public class PsoTagLibrary implements TagLibrary {

public Object getFreemarkerModels(ValueStack stack, HttpServletRequest req,
HttpServletResponse res) {
return new PsoModels(stack,req,res);
}

public List<Class> getVelocityDirectiveClasses() {
return null; //因为我不用velocity
}

}

在struts-plugin.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>
<bean type=”org.apache.struts2.views.TagLibrary” name=”pso” class=”package.PsoTagLibrary” />
<package name=”your-default”>
</package>
</struts>
最后你就可以在你的页面上做

<@pso.message/>

这样的写法。

分享到:
评论

相关推荐

    struts2+hibernate+freemarker项目实例

    自己写的一个框架例子,公司也在用,框架是struts2+hibernate+freemarker

    struts2_freemarker_mysql applicaton

    struts2_freemarker_mysql applicaton 这对于已有struts2和webwork基础的来说是一个很不错的学习实例。 带了具体说明及jar包

    struts2与webwork2

    struts2与webwork2之间的联系与区别

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    不用多说了,Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版),解压出来有200多M,因为权限不怎么够,我一共分了12卷,是一本不可多得的好书。第一卷附目录: 第1章 Struts 2概述,第2章 Struts 2下的Hello...

    struts2建立流程

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    webwork与struts处理上的异同(1) .txt

    webwork与struts处理上的异同(1) .txt webwork与struts处理上的异同(1) .txt

    webwork+spring+hibernate+freemarker (A)demo_project

    本源码实例只供学习。。 请一并下载webwork+spring+hibernate+freemarker (A)demo_lib 配合才能使用(此为项目的lib包。。) 请打开mark.txt参考操作

    Spring + hibernate + webwork + freemarker 整合配置

    Spring + hibernate + webwork + freemarker 整合配置

    struts2学习文档

    Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理...

    Struts 2中文帮助文档

    Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    完美版(适合自学)struts2

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    Struts2实战.pdf

    《Struts 2实战》结合实例介绍了Struts 2框架,主要内容包括Action、Result、Interceptor等框架组件,基于注解的配置选项等新特征,Struts 2插件 FreeMarker,如何从Struts 1和WebWork 2迁移到Struts 2,Ajax标签、...

    struts2JAR包

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    webwork开发文档 struts2学习助手

    webwork开发文档 struts2学习助手

    Struts2V3.0-(中文)参考手册

    Struts 2中文参考手册,Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,...

    struts2必须jar包

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    Struts2-Webwork2-DWR

    WEB2.0相关技术,深入浅出Struts2,Webwork2开发指南,DWR中文文档

    03解决struts2配置文件无提示问题

    Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    struts2 常用的五个jar包

    Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。因为Struts 2和Struts 1有着太大的变化,...

Global site tag (gtag.js) - Google Analytics