0 0

springmvc整合freemarker怎么弄25

springmvc整合freemarker整合流程和原理是什么?最好能有个demo!

问题补充:spirngmvc中freemarker自定义标签的使用原理
2014年7月10日 10:19

3个答案 按时间排序 按投票排序

0 0

采纳的答案

一、 用macro实现自定义指令,例如:

自定义指令可以使用macro指令来定义。
     <#macro greet person>
            <font size="+2">Hello ${person}!</font>
     </#macro>
     macro指令自身不打印任何内容,它只是用来创建宏变量,所以就会有一个名为greet的变量。
使用这个宏:
    <@greet person="Fred"/>
会打印出:
    <font size="+2">Hello Fred!</font>
二、用java代码标签实现自定义指令:

可以使用TemplateDirectiveModel接口在Java代码中实现自定义指令。
简单示例如下:
1、实现TemplateDirectiveModel接口。
            public class UpperDirective implements TemplateDirectiveModel {
                  public void execute(Environment env,
                           Map params, TemplateModel[] loopVars,
                           TemplateDirectiveBody body)
                           throws TemplateException, IOException {
                            if (!params.isEmpty()) {
                             throw new TemplateModelException(
                               "parameters 此处没有值!");
                            }
                           if (loopVars.length != 0) {
                           throw new TemplateModelException(
                          " variables 此处没有值!");
                          }
                         if (body != null) {
                         //执行nested body  与FTL中 <#nested> 类似。
                     body.render(new UpperCaseFilterWriter(env.getOut()));
                         } else {
                        throw new RuntimeException("missing body");
                         }
                    }
           private static class UpperCaseFilterWriter extends Writer {
           private final Writer out;
           UpperCaseFilterWriter (Writer out) {
            this.out = out;
        }        
        public void write(char[] cbuf, int off, int len)
            throws IOException {
            char[] transformedCbuf = new char[len];
                for (int i = 0; i < len; i++) {
                               transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]);
                }
                    out.write(transformedCbuf);
            }
        public void flush() throws IOException {
                out.flush();
            }
                public void close() throws IOException {
                out.close();
                }
           }
       }

     说明:<#nested>指令执行位于开始和结束标记指令之间的模板代码段。

2、注入FreeMarkerConfigurer的freemarkerVariables中。
     例如:在jeecms-servlet-front.xml
    <entry key="upper" value-ref="upper"/>
    <bean id="upper" class="com.example.UpperDirective" />

   说明: 
   FreeMarkerConfigurer. 、setFreemarkerVariables(Map<String,Object> variables)
   底层调用了FreeMarker的Configuration.setAllSharedVariables()方法。
   因为更好的实践是将常用的指令作为共享变量放到Configuration中。

3、调用自定义指令:

     [@upper]
             bar
             [#list ["red", "green", "blue"] as color]
                  ${color}
            [/#list]
            baaz
     [/@upper]
4、显示输出结果:
      BAR RED GREEN BLUE BAAZ

2014年7月10日 10:37
0 0

freemarker的xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
						http://www.springframework.org/schema/aop 
						http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context-3.0.xsd
						http://www.springframework.org/schema/cache
						http://www.springframework.org/schema/cache/spring-cache.xsd
						http://www.springframework.org/schema/mvc
       					http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<!-- freemarker的配置 -->
	<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
		<property name="templateLoaderPath" value="/WEB-INF/freemarker/" />
		<property name="defaultEncoding" value="utf-8" />
		<property name="freemarkerSettings">
			<props>
				<prop key="template_update_delay">10</prop>
				<prop key="locale">zh_CN</prop>
				<prop key="datetime_format">yyyy-MM-dd</prop>
				<prop key="date_format">yyyy-MM-dd</prop>
				<prop key="number_format">#.##</prop>
			</props>
		</property>
	</bean>
	<!-- FreeMarker视图解析 。在这里配置后缀名ftl和视图解析器。。 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
		<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
		<property name="suffix" value=".ftl" />
		<property name="contentType" value="text/html;charset=utf-8" />
		<property name="exposeRequestAttributes" value="true" />
		<property name="exposeSessionAttributes" value="true" />
		<property name="exposeSpringMacroHelpers" value="true" />
	</bean>

</beans>


模板ftl
${user.uId}
${user.uName}
${user.uPassword}
<#list userList as u>
${u.uId}
${u.uName}
${u.uPassword}
</#list>

/**
 * @author kingcs
 */
@Controller
@RequestMapping("/springFreemarkerController")
public class SpringFreemarkerController {

	/**
	 * 
	 */
	@RequestMapping(value = "/freemarker", method = RequestMethod.GET)
	public String restList(Model model) {

		User user = new User();
		user.setuId(123);
		user.setuName("zhangsan");
		user.setuPassword("123456");
		user.setuBrithday(new Date());

		model.addAttribute("user", user);
		
		List<User> users = new ArrayList<User>();
		for(int i=0; i<10; i++) {
			User u = new User();
			u.setuId(i);
			u.setuName("zhangsan");
			u.setuPassword("123456");
			users.add(u);
		}
		model.addAttribute("userList", users);
		return "test";
	}
}

2014年7月10日 13:00
0 0

其实也没有什么原理之类的, 大致原理是:将页面中所需要的样式放入FreeMarker文件中,然后将页面所需要的数据动态绑定,并放入Map中,通过调用FreeMarker模板文件解析类process()方法完成静态页面的生成。了解了上面的原理,接下来我就一步 步带您实现FreeMarker生成静态页面。

Demo
http://blog.csdn.net/daryl715/article/details/1657149

2014年7月10日 10:27

相关推荐

    基于注解的springmvc 整合freemarker的入门例子

    这是一个基于eclipse+springmvc+freemarker+注解的入门例子,是一个war包,import到eclipse就应该可以直接运行,但是确保maven环境到存在;我做为一个入门者,是参照了...

    SpringMVC整合Freemarker例子

    在SpringMVC中整合FreeMarker,首先需要在项目中引入相关的依赖。通常在Maven项目中,我们需要在pom.xml文件中添加SpringMVC和FreeMarker的依赖项,如下所示: ```xml &lt;!-- Spring MVC --&gt; &lt;groupId&gt;org....

    SpringMVC+Freemarker+Hibernate整合范例

    4. **整合流程**:在SpringMVC+Freemarker+Hibernate整合中,通常会首先配置Spring的ApplicationContext,包括DataSource、SessionFactory、HibernateTemplate或JPA的相关配置。接着,定义Controller,处理HTTP请求...

    springMVC+freemarker整合实例

    **SpringMVC整合FreeMarker** 1. **环境配置** 首先,确保你已经安装了JDK、Maven或Gradle等构建工具,以及Tomcat或Jetty等Web服务器。在`pom.xml`(如果你使用的是Maven)或`build.gradle`(如果你使用的是Gradle...

    SpringMVC-Freemarker_Sitemesh3例子

    为了实现SpringMVC、Freemarker和Sitemesh3的整合,我们需要以下步骤: 1. **配置Maven**:在`pom.xml`中添加所需的依赖,如SpringMVC、Freemarker和Sitemesh3的jar包。 2. **配置SpringMVC**:在`web.xml`中配置...

    SpringMVC整合Freemarker

    **SpringMVC与Freemarker整合详解** SpringMVC作为Java Web开发中的主流MVC框架,常用于构建高效、可维护的Web应用。而Freemarker则是一种强大的模板引擎,适用于生成动态HTML或其他格式的文档。这两者的整合使得...

    springmvc+freemarker+shiro

    在IT行业中,SpringMVC、FreeMarker和Shiro是三个非常重要的框架,它们分别负责不同的功能领域。SpringMVC作为Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构;FreeMarker则是一个强大...

    springmvc项目源码、整合freemarker

    SpringMVC是一个强大的Java web应用程序开发...综上所述,这个项目展示了如何在SpringMVC中整合Freemarker,为开发者提供了一个后端服务和动态页面展示的平台。理解并实践这些知识点,将有助于提升Java Web开发能力。

    springMVC + freemarker + apache tiles

    SpringMVC、Freemarker和Apache Tiles是三个在Web...通过学习和实践这个项目,开发者可以了解到如何在SpringMVC中整合模板引擎和页面布局框架,同时掌握Ibatis的基本操作,这对于构建复杂且易维护的Web应用非常有帮助。

    springmvc+freemarker带sql的登录事例

    总之,这个"springmvc+freemarker带sql的登录事例"是一个基本的Web应用实践,涵盖了Spring MVC的请求处理、FreeMarker模板的使用以及与数据库的交互。通过这个实例,开发者可以学习到如何将这些组件整合起来,构建一...

    SpringMVC+freemarker

    通过 SpringMVC 和 Freemarker 的整合,我们可以构建出一个高效、灵活的 Web 应用,将复杂的业务逻辑与页面展示分离,提高开发效率和可维护性。同时,自定义标签的使用,进一步增强了模板的功能性和可扩展性。

    springmvc整合hibernate4

    整合Hibernate4到SpringMVC项目中,我们需要: 1. 添加依赖:在`pom.xml`文件中添加SpringMVC和Hibernate4的依赖库。 2. 数据源配置:在Spring配置文件中配置数据源,这里使用了C3P0连接池,它能有效管理数据库连接...

    freemarker与springmvc整合的例子

    **FreeMarker与SpringMVC整合基础** FreeMarker是一个强大的模板引擎,它被广泛应用于Web开发中,用于生成动态HTML或其他格式的文档。SpringMVC是Spring框架的一部分,它是一个轻量级的MVC(Model-View-Controller...

    Spring3.0+Hibernate4.0+SpringMVC整合ExtJS4

    在本项目中,我们探讨的是如何将三个主流的Java企业级框架——Spring 3.0、Hibernate 4.0和Spring MVC与JavaScript前端框架ExtJS 4进行深度整合,以构建一个高效、灵活且功能丰富的Web应用。这个整合旨在提供一个...

    spring和springMVC整合源码

    本文将深入探讨"Spring和SpringMVC整合"的相关知识点,以及如何创建一个简单的"Hello, World!"示例。 1. **Spring框架核心概念** - **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,...

    SpringMVC+Freemark 简单整合。

    通过这样的整合,SpringMVC利用其强大的路由和控制能力,结合FreeMarker的模板渲染功能,可以实现灵活的Web应用开发。在实际项目中,还可以根据需求配置更多高级特性,如缓存管理、模板语法定制等,进一步提升开发...

    maven+springmvc+mybatis+freemarker整合框架

    在“maven+springmvc+mybatis+freemarker”框架整合中,Maven负责管理项目依赖,确保所有组件正确无误地协同工作。 **SpringMVC** SpringMVC是Spring框架的一部分,用于构建Web应用的Model-View-Controller(MVC)...

    springmvc+mybatis 和一个简单的freemarker代码生成工具

    在IT行业中,SpringMVC、MyBatis以及FreeMarker是三个非常重要的技术组件,它们各自在Web开发领域中扮演着不同的角色。SpringMVC作为Spring框架的一部分,是用于构建MVC(Model-View-Controller)架构的轻量级Web...

    Maven+Spring+SpringMVC+MyBatis+FreeMarker模版下载为Word的Demo

    这是一个基于Java技术栈的Web应用开发示例,主要利用了Maven、Spring、SpringMVC、MyBatis和FreeMarker五个关键组件。下面将详细解释这些技术和它们在项目中的作用。 1. Maven: Maven是Apache开发的一个项目管理...

Global site tag (gtag.js) - Google Analytics