在使用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整合**: 1. **视图渲染**:Struts2 Action执行完成后,可以通过配置将结果导向FreeMarker模板。例如,设置`<result type="freemarker">/WEB-INF/views/result.ftl</result>`。 2. **数据传递*...
Freemarker是一个与语言无关的模板引擎,它将数据模型和HTML或其他格式的模板分离,使得开发者可以专注于业务逻辑,而设计师则可以独立地设计视图。Freemarker模板使用简单的语法,如`<#if>`、`<#foreach>`等,来...
4. **Freemarker模板**:在Freemarker模板中,你可以使用Struts2提供的`<s:iterator>`标签遍历当前页的数据,同时使用自定义的Freemarker宏或Struts2的`<s:url>`标签生成分页链接。例如,可以创建一个`pagination....
Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...
将Nutz与Freemarker结合,可以实现类似Struts2中对Freemarker模板的支持,使开发者能够利用Freemarker的强大功能来构建动态网页。 首先,让我们深入了解Nutz和Freemarker的基本概念: 1. **Nutz**: - Nutz是一个...
2. **数据模型与变量**: 在Freemarker中,数据模型是由Java对象组成的,这些对象可以通过模板语言访问。模板中的变量通常引用这些数据模型中的属性,例如`${user.name}`将输出用户对象的name属性值。 3. **模板设计...
FreeMarker与Spring、Struts等框架集成良好,允许开发者将业务逻辑与视图展示分离,提高代码的可维护性和可扩展性。 FreeMarker的核心概念是模板和数据模型。模板是HTML或其他格式的静态文件,其中包含一些特定的...
对于Web应用,FreeMarker内置了处理Web相关任务的功能,如HTML转义,并且可以与Model2框架(如Struts)无缝集成,作为JSP的替代。同时,它支持JSP标记库,便于MVC模式的实现,确保页面设计师和程序员的工作分离。 ...
1. 基于MVC的分离:FreeMarker作为视图层,负责呈现数据,而业务逻辑和数据处理由Controller和Model负责。 2. 缓存机制:FreeMarker可以缓存编译后的模板,提高性能。 3. 国际化支持:使用`${locale}`和`...
在Struts2与Velocity结合使用时,通常会将Velocity模板作为Action执行后的Result,这样Action处理完业务逻辑后,会将控制权交给Velocity模板来生成最终的HTML响应。开发者可以利用Struts2的Action和Interceptor来...
Freemarker是一个强大的Java模板引擎,它允许程序员将呈现逻辑从应用程序代码中分离出来,让设计人员能够专注于页面布局和样式。在Web开发中,尤其是Java企业级应用中,Freemarker被广泛用于生成动态HTML内容,比如...
例如,在Spring MVC框架中,Freemarker作为视图解析器,负责将后台处理的数据与模板结合,生成最终的HTML页面。`freemarker-ide-0.9.14` 插件的使用有助于提升开发团队的生产力,减少因模板语法错误导致的问题,从而...
它与Spring、Struts等框架配合使用,能够将业务逻辑与页面展示分离,使得开发者可以专注于设计美观且功能完备的用户界面,而无需关心如何将数据渲染成HTML。 FreeMarker的工作原理是基于模板和数据模型。模板是由...
FreeMarker是一个基于Java的模板引擎,其主要用途是生成文本输出,尤其是用于HTML Web页面的生成,常在MVC模式的应用程序中使用。它不是Web应用框架,而是作为一个独立组件与其他框架(如Struts)配合工作,提供视...
- **MVC兼容性**:FreeMarker的设计非常适合用作Model2框架(如Struts)中的视图组件。 - **支持JSP标记库**:可以与JSP标记库一起使用。 ##### 5. 国际化与本地化 - **字符集智能化**:内部使用Unicode字符集。 - ...
FreeMarker 的优点在于它将页面设计与应用程序逻辑分离,使得页面设计师和程序员可以各自专注于他们的工作,提高了开发效率和代码可维护性。在上述例子中,`Test1.java` 类展示了如何使用 FreeMarker 生成简单的文本...
FreeMarker 是一个强大的模板...总的来说,FreeMarker是一个灵活、强大且高效的模板引擎,它的主要作用在于帮助开发者将静态模板与动态数据结合,生成符合特定需求的文本输出,尤其适用于构建基于MVC架构的Web应用。
同时,它还支持JSP标签库的使用,为MVC模式设计,促进页面设计师与程序员之间的职责分离。 5. **国际化与本地化支持**:Freemarker内置智能的国际化与本地化功能,包括字符集管理(内部使用Unicode)、数字和日期...
- 可以作为 Model2 框架(如 Struts)的视图组件,并且可以在模板中使用 JSP 标记库。 #### 通用目标 - **多样化的输出**: 支持生成各种类型的文本输出,包括 HTML、XML、RTF、Java 源代码等。 - **易于集成**: 轻...
- **对象封装**:FreeMarker使用插件式的对象封装机制来展示Java对象,这使得开发者能够在不直接暴露底层实现的情况下使用对象。 - **抽象表示**:可以通过抽象接口的形式来表示对象,例如JavaBean、XML文档、SQL...