1.继承FreemarkerManager重写createConfiguration方法
package com.rx.freemarker;
import java.util.Map;
import javax.servlet.ServletContext;
import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import freemarker.template.Configuration;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
public class MyFreemarkerManager extends FreemarkerManager {
@Override
protected Configuration createConfiguration(ServletContext servletContext)
throws TemplateException {
Configuration configuration = super.createConfiguration(servletContext);
// 设置标签类型([]、<>),[]这种标记解析要快些
configuration.setTagSyntax(Configuration.AUTO_DETECT_TAG_SYNTAX);
// 取出上下文
ApplicationContext applicationContext = WebApplicationContextUtils
.getRequiredWebApplicationContext(servletContext);
// 获取实现TemplateDirectiveModel的bean
Map<String, Object> beans = applicationContext
.getBeansOfType(TemplateDirectiveModel.class);
for (String key : beans.keySet()) {
Object obj = beans.get(key);
if (obj != null && obj instanceof TemplateDirectiveModel) {
configuration.setSharedVariable(key, obj);
}
}
return configuration;
}
}
2.在struts.properties中配置自定义管理类
struts.freemarker.manager.classname=com.rx.freemarker.MyFreemarkerManager
3.自定义标签
package com.rx.freemarker;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Component;
import freemarker.core.Environment;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
@Component("ranks")
public class RanksTemplateDirectiveModel implements TemplateDirectiveModel {
public void execute(Environment environment, Map map,
TemplateModel[] atemplatemodel,
TemplateDirectiveBody templatedirectivebody)
throws TemplateException, IOException {
environment.setVariable("ranks", ObjectWrapper.DEFAULT_WRAPPER
.wrap(getRanks()));
templatedirectivebody.render(environment.getOut());
}
private List<String> getRanks() {
List<String> list = new ArrayList<String>();
list.add("第一名");
list.add("第二名");
list.add("第三名");
list.add("第四名");
list.add("第五名");
list.add("第六名");
list.add("第七名");
list.add("第八名");
list.add("第九名");
list.add("第十名");
return list;
}
}
4.模板
[@ranks]
[#list ranks as rank]
${rank}
[/#list]
[/@ranks]
分享到:
相关推荐
通过将Struts2的模型数据传递给FreeMarker模板,前端开发人员可以使用FreeMarker提供的丰富的模板标签和函数来渲染页面。 #### 配置Struts2与FreeMarker 在Struts2中使用FreeMarker之前,首先需要进行相应的配置。...
• 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
自定义标签可以与Spring MVC、Struts2等框架集成,提供更丰富的功能。 通过上述内容,我们了解了Freemarker自定义标签的基本概念、创建与使用方法,以及如何在实际项目中发挥作用。自定义标签极大地增强了...
通过拦截器(Interceptor)机制,Struts2允许开发者自定义行为,如日志、权限检查等。此外,Struts2支持多种结果类型,包括JSP、FreeMarker、Velocity等模板引擎,使得视图与控制器分离,提高了代码的可维护性。 **...
此外,Struts2支持多种结果类型,如JSP、FreeMarker、Velocity等。 2. **Action类**:在Struts2中,Action类是业务逻辑的载体。你需要创建一个Action类,继承自`ActionSupport`或自定义的Action父类,并重写`...
Struts2还支持多种视图技术,如JSP、FreeMarker等,并且能够与其他框架如Hibernate、Spring无缝集成。 2. **JSTL(JavaServer Pages Standard Tag Library)**:JSTL是一组用于JSP的标签库,旨在减少在页面中使用...
1. **灵活性**:Spring MVC允许更多的自定义,如自定义拦截器、视图解析器,而Struts2的扩展性相对弱些。 2. **依赖注入**:Spring MVC是Spring框架的一部分,天然支持DI,而Struts2需要额外集成Spring才能实现DI。 ...
在Struts 2中,Action类是业务逻辑处理的核心,请求通过配置的ActionMapping映射到相应的Action执行,返回的结果可以是JSP、FreeMarker模板或者其他自定义的结果类型。 **Spring框架** Spring是一个全面的后端应用...
8. **视图技术**:在Struts2Spring项目中,视图通常使用JSP和FreeMarker等模板技术,结合OGNL(Object-Graph Navigation Language)表达式语言进行数据绑定。 9. **国际化和本地化**:项目可能包含了多语言支持,...
6. **视图渲染**:如果登陆成功,Struts的Action会将控制权交给Spring MVC的视图解析器,如JSP或FreeMarker,来展示欢迎页面或者其他用户权限允许的内容。 7. **测试**:由于Spring的依赖注入特性,我们可以很容易...
Struts2和Spring是两个非常著名的Java开源框架,它们在企业级应用开发中扮演着重要角色。Struts2主要用于处理MVC(Model-View-Controller)架构中的控制器部分,而Spring则是一个全面的企业级应用框架,包括依赖注入...
Struts2支持多种模板技术,如FreeMarker和JSP,能够轻松实现动态页面渲染。 Spring3是全面的企业级应用框架,它在业务层提供了依赖注入(DI)和面向切面编程(AOP)的能力,帮助开发者管理对象的生命周期和装配。...
· 采用hibernate3+struts2+spring2+freemarker主流技术架构 · 懂html就能建站,提供最便利、合理的使用方式 · 强大、灵活的标签,用户自定义显示内容和显示方式 · 在设计上自身预先做了搜索引擎优化,增强对...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2主要用于MVC(模型-视图-控制器)架构的实现,Spring提供了强大的依赖注入和面向切面编程功能,而Hibernate则是一个优秀的...
3. **Action 类**:这些类继承自 `ActionSupport` 或自定义的 Struts2 动作类,并且被声明为 Spring Bean。Struts2 通过 ActionProxy 将请求转发到 Spring 容器来创建动作类实例。 4. **Service 类**:这些类通常...
Struts2提供了强大的拦截器(Interceptor)机制,允许自定义行为,如数据验证、事务管理等。此外,它还支持多种视图技术,如JSP、FreeMarker、Velocity等。Struts2与Spring的整合使得用户可以利用Spring的DI特性,更...
Struts2还支持拦截器,可以添加自定义的业务逻辑或验证规则。此外,它与各种模板技术如FreeMarker和JSP集成良好,使得视图层的创建更加灵活。 **Spring** 是一个全面的后端应用框架,它不仅仅涵盖了MVC,还包括依赖...
Struts2提供了拦截器机制,允许开发者自定义业务逻辑处理前后的操作,增强了可扩展性和灵活性。此外,它还支持多种视图技术,如JSP、FreeMarker等,并提供了丰富的标签库,使得视图层的开发更加便捷。 **Spring** ...