struts2改用FreeMarker作为表示层。
FreeMarker不支持使用taglib指令来导入标签库,但struts2提供了额外的支持。
步骤如下:
1,将要用的.tld文件复制到web应用中。
2,web.xml中启动JSPSupportServlet。
<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
3,在FreeMarker模板中使用assign指令导入标签库。
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
就可以使用标签了。
<@s.form action="Login.action">
<@s.textfield name="username" label="用户名"/>
<@s.textfield name="password" label="密码"/>
<@s.submit value="提交"/>
</@s.form>
4,web容器默认不处理模板页面,必须通过struts2。
我们将模板放到WEB-INF/ftl下,
在struts.xml增加如下配置,
<action name="*">
<result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>
</action>
======================================
struts2解析模板中的变量顺序如下:
1,模板内建变量
2,ValueStack中的变量
3,ActionContext中的变量
4,HttpServletRequest范围变量
5,HttpSession范围变量
6,ServletContext范围变量
--------
FreeMarker模板内建变量如下:
1,stack,${stack.findString('ognl expr')}。
2,action,代表刚执行过的Action实例。
3,response,res,代表HttpServletResponse实例。
4,request,req。
5,session,application。
6,base,代表用户请求的上下文路径。
------------
<#if Application.attName?exists>
${Application.attName}
</#if>
或者
<@s.property value="%{#application.attName}" />
对于Request,不仅可以访问属性,还可以访问参数。
<@s.property value="%{#parameters.paraName}" />
此外访问ValueStack上下文参数,可以${stack.findValue('#contextParamName')}
或者<@s.property value="%{#contextParamName}" />
=========================
=========================
文本,注释<#-- -->插值${}或者#{},FTL指令<#指令名 >,如果是用户指令则用@符号。
http://freemarker.sourceforge.net/docs/index.html-------------------
模板文件test.ftl--
${name},你好!${msg}
合并程序--
package lee;import java.util.*;
import java.io.*;
import freemarker.template.*;public class HelloFreeMarker
{
private Configuration cfg;
public void init() throws Exception
{
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模版文件位置
cfg.setDirectoryForTemplateLoading(new File("templates"));
}
public void process()throws Exception
{
Map root = new HashMap();
root.put("name", "FreeMarker!");
root.put("msg" , "您已经完成了第一个FreeMarker的示例");
Template t = cfg.getTemplate("test.ftl");
t.process(root, new OutputStreamWriter(System.out));}public static void main(String[] args)throws Exception
{
HelloFreeMarker hf = new HelloFreeMarker();
hf.init();
hf.process();
}}
------------------------------------
web应用中
模板文件test.ftl--
<html>
<head>
<title>FreeMarker的HelloWorld</title>
</head>
<body>
${message}
</body>
</html>
合并程序--
package lee;import java.util.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import freemarker.template.*;public class HelloServlet extends HttpServlet
{
private Configuration cfg;
public void init()
{
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模版文件位置
cfg.setServletContextForTemplateLoading(getServletContext(), "WEB-INF/templates");
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//建立数据模型
Map root = new HashMap();
root.put("message", "Hello FreeMarker!");
//取得模版文件
Template t = cfg.getTemplate("test.ftl");
// 开始准备生成输出
// - 使用模版文件的charset作为本页面的charset
// - 使用text/html MIME-type
response.setContentType("text/html; charset=" + t.getEncoding());
Writer out = response.getWriter();
//合并数据模型和模版,并将结果输出到out中
try
{
t.process(root, out);
}
catch (TemplateException e)
{
throw new ServletException("处理Template模版中出现错误", e);
}
}
}
相关推荐
• 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
在学习和使用这个项目实例时,你需要理解每个框架的核心概念和工作原理,如Struts2的动作(Action)和结果(Result),Hibernate的实体(Entity)、会话(Session)和查询,以及FreeMarker的模板语法。此外,还需要...
struts2+spring2.5+hibernate3.2 + freemarker 全新功能实现的增删改查+freemarker 摸版 struts2 的方式自己去看简单。 spring2.5 是用注释来注入 hibernate3.2 是用ejb3注解映射关系 hibernate3 +个属性可以自动...
JEECMS使用目前java主流技术架构:hibernate3+struts2+spring2+freemarker。AJAX使用jquery和json实现。视图层并没有使用传统的JSP技术,而是使用更为专业、灵活、高效freemarker。 数据库使用MYSQL,并可支持orcale...
总结起来,"spring+hibernate+struts2+freemarker SSH2 新闻发布系统"是一个基础的Java Web项目,展示了SSH2框架组合在实际开发中的应用。开发者可以通过学习这个小例子,理解如何整合这些技术来构建更复杂的Web应用...
整合S2SH+Freemarker,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。
Struts2支持多种视图技术,包括JSP、FreeMarker和Velocity等。 3. **集成过程**:在Struts2中集成FCKeditor,首先需要将FCKeditor的JavaScript库和相关资源文件(如CSS、图片等)部署到Web应用的公共目录下。然后,...
整合S2SH+Freemarker+oscache,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。
赠送jar包:freemarker-2.3.31.jar; 赠送原API文档:freemarker-2.3.31-javadoc.jar; 赠送源代码:freemarker-2.3.31-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.31.pom; 包含翻译后的API文档:...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建企业级Web应用程序,而FreeMarker则是一个模板引擎,用于生成动态HTML或...
Struts2和FreeMarker是Java Web开发中两个重要的框架,它们常常被一起使用来构建动态网站。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,而FreeMarker则是一个模板引擎,主要用于生成动态内容...
Struts2 和 Freemarker 是两个在Java Web开发中广泛应用的技术,它们共同构成了强大的MVC...通过对这个文件的深入学习和实践,开发者可以更熟练地掌握Struts2和Freemarker的结合使用,提升Web应用开发的效率和质量。
在“Struts2+freemarker+flash 采集摄像头头像”这个场景中,Freemarker可能会被用来动态生成显示用户头像的页面,根据后台传递的数据(例如头像URL)来渲染页面。 Flash在Web开发中的角色主要是提供多媒体支持,...
Struts2和Freemarker是两个非常流行的Java Web开发框架,它们经常被一起使用来构建动态、交互式的Web应用程序。国际化(Internationalization,通常缩写为i18n)是软件开发中的一个重要概念,它允许应用程序支持不同...
在提供的"struts2freemarker"压缩包中,可能包含了以下内容: - Action类:实现了业务逻辑和跳转到FreeMarker模板的配置。 - FreeMarker模板(.ftl文件):包含了HTML结构和FreeMarker指令,用于展示数据。 - Struts...
本项目“s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单”就是这样一个解决方案,它整合了多种技术来实现这一功能。 首先,我们来看“s2sh”。这是Struts2、Spring和Hibernate三者的简称,它们分别是MVC...
在Struts与FreeMarker的整合中,通常需要在Struts的配置文件(struts-config.xml或struts2的struts.xml)中定义Action和对应的Result,指定使用FreeMarker来渲染结果。例如: ```xml <result type="freemarker">/...
赠送jar包:freemarker-2.3.30.jar; 赠送原API文档:freemarker-2.3.30-javadoc.jar; 赠送源代码:freemarker-2.3.30-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.30.pom; 包含翻译后的API文档:...
在这个“struts1+spring+hibernate+freemarker一个小例子”中,我们将探讨这四个组件如何协同工作,以及它们各自的核心功能。 首先,Struts1是MVC(模型-视图-控制器)设计模式的一个实现,主要用于处理HTTP请求和...