`
REALGODO
  • 浏览: 176669 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

基于Struts2的使用Freemarker宏实现数据与页面的分离

阅读更多

      在使用Struts2与Freemarker开发时候,可以通过使用Freemarker的宏(macro)来达到数据与页面分离的效果,使页面开发者与后台业务开发者分离,并提高了业务代码的重用性。

      主要的思路如下。

      首先是Struts2代码

 

package com.test.mms.article.web.tag;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
@Scope("prototype")
public class TagAction extends ActionSupport {

	public String execute() {
		String[] names = { "Lucy", "Lily", "Gordon" };
		ServletActionContext.getRequest().setAttribute("names", names);
		return SUCCESS;
	}
}

    接着是Freemarker的宏声明,因为使用了struts2-convention-plugin ,故不需要配置文件指定跳转关系。

 

<#macro Test_tag >
	<@s.action name="tag" namespace="/article/web/tag" executeResult="false">
    </@s.action>
    	<#nested names>
</#macro>

 

    请求了TagAction并将executeResult指定为false,不返回页面,只从request中获取数据。

 

    下面是具体调用宏的页面。MMS是Freemarker的命名空间。

<@MMS.Test_tag >
	<#if names??>
	<ul>
		<#list names as name>
		<li>
			${name}
		</li>
		</#list>
	</ul>
	<#else>
		我是空的
	</#if>
</@MMS.Test_tag>

 

   MMS.Test_tag宏的声明也可以进行如下优化

<#macro Test_tag inner="1">
	<@s.action name="tag" namespace="/article/web/tag" executeResult="false">
    </@s.action>
    	<#nested names,ages,educations>
	    <#if inner="0">
	   		 <#if names??>
				<#list names as name>
				<span>${name}</span>
				</#list>
			</#if>
	    </#if>
</#macro>

     简单解释下,宏加入了一个新参数inner 默认值是1,当inner为0时候为names提供一个默认的样式,而ages,educations是另外两组数据不提供默认样式。

分享到:
评论

相关推荐

    struts2-freemarker

    **Struts2与FreeMarker整合**: 1. **视图渲染**:Struts2 Action执行完成后,可以通过配置将结果导向FreeMarker模板。例如,设置`&lt;result type="freemarker"&gt;/WEB-INF/views/result.ftl&lt;/result&gt;`。 2. **数据传递*...

    struts2.0整合freemarker

    Freemarker是一个与语言无关的模板引擎,它将数据模型和HTML或其他格式的模板分离,使得开发者可以专注于业务逻辑,而设计师则可以独立地设计视图。Freemarker模板使用简单的语法,如`&lt;#if&gt;`、`&lt;#foreach&gt;`等,来...

    Freemarker分页

    4. **Freemarker模板**:在Freemarker模板中,你可以使用Struts2提供的`&lt;s:iterator&gt;`标签遍历当前页的数据,同时使用自定义的Freemarker宏或Struts2的`&lt;s:url&gt;`标签生成分页链接。例如,可以创建一个`pagination....

    freemarker Demo 适用于freemarker初学

    Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...

    nutz的freemarker视图插件

    将Nutz与Freemarker结合,可以实现类似Struts2中对Freemarker模板的支持,使开发者能够利用Freemarker的强大功能来构建动态网页。 首先,让我们深入了解Nutz和Freemarker的基本概念: 1. **Nutz**: - Nutz是一个...

    freemarker中文文档与包

    2. **数据模型与变量**: 在Freemarker中,数据模型是由Java对象组成的,这些对象可以通过模板语言访问。模板中的变量通常引用这些数据模型中的属性,例如`${user.name}`将输出用户对象的name属性值。 3. **模板设计...

    基于Java的模板引擎 FreeMarker.zip

    FreeMarker与Spring、Struts等框架集成良好,允许开发者将业务逻辑与视图展示分离,提高代码的可维护性和可扩展性。 FreeMarker的核心概念是模板和数据模型。模板是HTML或其他格式的静态文件,其中包含一些特定的...

    FreeMarker.pdf

    对于Web应用,FreeMarker内置了处理Web相关任务的功能,如HTML转义,并且可以与Model2框架(如Struts)无缝集成,作为JSP的替代。同时,它支持JSP标记库,便于MVC模式的实现,确保页面设计师和程序员的工作分离。 ...

    freeMarker中文手册PDF

    1. 基于MVC的分离:FreeMarker作为视图层,负责呈现数据,而业务逻辑和数据处理由Controller和Model负责。 2. 缓存机制:FreeMarker可以缓存编译后的模板,提高性能。 3. 国际化支持:使用`${locale}`和`...

    Struts2+velocity jar

    在Struts2与Velocity结合使用时,通常会将Velocity模板作为Action执行后的Result,这样Action处理完业务逻辑后,会将控制权交给Velocity模板来生成最终的HTML响应。开发者可以利用Struts2的Action和Interceptor来...

    freemarker相关文档

    Freemarker是一个强大的Java模板引擎,它允许程序员将呈现逻辑从应用程序代码中分离出来,让设计人员能够专注于页面布局和样式。在Web开发中,尤其是Java企业级应用中,Freemarker被广泛用于生成动态HTML内容,比如...

    freemarker-ide-0.9.14

    例如,在Spring MVC框架中,Freemarker作为视图解析器,负责将后台处理的数据与模板结合,生成最终的HTML页面。`freemarker-ide-0.9.14` 插件的使用有助于提升开发团队的生产力,减少因模板语法错误导致的问题,从而...

    Java模板引擎 FreeMarker.7z

    它与Spring、Struts等框架配合使用,能够将业务逻辑与页面展示分离,使得开发者可以专注于设计美观且功能完备的用户界面,而无需关心如何将数据渲染成HTML。 FreeMarker的工作原理是基于模板和数据模型。模板是由...

    真正的Freemarker中文版教程

    FreeMarker是一个基于Java的模板引擎,其主要用途是生成文本输出,尤其是用于HTML Web页面的生成,常在MVC模式的应用程序中使用。它不是Web应用框架,而是作为一个独立组件与其他框架(如Struts)配合工作,提供视...

    freeMarker资料

    - **MVC兼容性**:FreeMarker的设计非常适合用作Model2框架(如Struts)中的视图组件。 - **支持JSP标记库**:可以与JSP标记库一起使用。 ##### 5. 国际化与本地化 - **字符集智能化**:内部使用Unicode字符集。 - ...

    FreeMarker教程

    FreeMarker 的优点在于它将页面设计与应用程序逻辑分离,使得页面设计师和程序员可以各自专注于他们的工作,提高了开发效率和代码可维护性。在上述例子中,`Test1.java` 类展示了如何使用 FreeMarker 生成简单的文本...

    freemarker指南.doc

    FreeMarker 是一个强大的模板...总的来说,FreeMarker是一个灵活、强大且高效的模板引擎,它的主要作用在于帮助开发者将静态模板与动态数据结合,生成符合特定需求的文本输出,尤其适用于构建基于MVC架构的Web应用。

    freemarker中文手册

    同时,它还支持JSP标签库的使用,为MVC模式设计,促进页面设计师与程序员之间的职责分离。 5. **国际化与本地化支持**:Freemarker内置智能的国际化与本地化功能,包括字符集管理(内部使用Unicode)、数字和日期...

    freemarker-2.3.19教程

    - 可以作为 Model2 框架(如 Struts)的视图组件,并且可以在模板中使用 JSP 标记库。 #### 通用目标 - **多样化的输出**: 支持生成各种类型的文本输出,包括 HTML、XML、RTF、Java 源代码等。 - **易于集成**: 轻...

    FreeMarker设计指南(PDF版)

    - **对象封装**:FreeMarker使用插件式的对象封装机制来展示Java对象,这使得开发者能够在不直接暴露底层实现的情况下使用对象。 - **抽象表示**:可以通过抽象接口的形式来表示对象,例如JavaBean、XML文档、SQL...

Global site tag (gtag.js) - Google Analytics