变量值将可以从多个地方取得,Struts2解析FreeMarker模板中变量的顺序如下:
1,FreeMarker模板内建的变量; 2,ValueStack中的变量; 3,ActionContext中的变量; 4,HttpServletRequest中的属性; 5,HttpSession中的属性; 6,ServletContext范围的属性.
FreeMarker模板的内建变量有如下几个:
1,stack:代表ValueStack本身,可通过如下方式来访问其中的变量\2,action:代表刚刚执行过的Action实例 3,response:代表HpptServletResponse实例 4,res:代表HpptServletResponse实例 5,request:代表HpptServletRequest实例 6,req:代表HpptServletRequest实例 7,session:代表HpptSession实例 8,application:代表ServletContext实例 9,base:代表用户请求的上下文路径. 4.3 FreeMarker中访问Servlet/JSP范围对象
Struts2还为在FreeMarker模板中访问Servlet/JSP范围对象提供了支持,通过这种支持可以直接访问这些变量.
访问application范围内的属性代码如下: <#if Application.attributeName?exists> ${Application.attributeName} #if>
也可以通过使用Struts2标签来输出,代码如下: <@s.property value=\访问session范围内的属性如下: <#if Session.attributeName?exists> ${Session.attributeName} #if> 或
<@s.property value=\访问request范围内的属性如下: <#if Request.attributeName?exists> ${Request.attributeName} #if> 或
<@s.property value=\对于request,还可以访问request的请求参数,如下: <#if Parameter.parameterName?exists> ${Parameter.parameterName} #if>
或
<@s.property value=\访问ValueStack上下文参数,代码如下: ${stack.findValue('#myContextParam')} 或
<@s.property value=\
struts2中使用freemarker
普通的struts2配置文件一般是这么配置的:
这里的view是一个jsp页面,也可以改成是一个freemarker模板页面:
当然我们希望能在fm.ftl上使用struts2的标签,需要在fm.ftl页面最开始添加对struts2标签的引用:
<#assign s=JspTaglibs[\
引用前把struts2-core-2.0.x.x.jar包里的META-INF/struts-tags.tld 复制到 /WEB-INF/struts-tags.tld
默认是不支持JspTaglibs的引用的,这里还需要一个额外的配置,修
改web.xml,添加如下内容:
org.apache.struts2.views.JspSupportServlet
一个简单的fm.ftl文件的例子:
<#assign s=JspTaglibs[\
http-equiv=“Content-Type“
content=“text/html;
charset=GB2312“>
<@s.form action=“Action1.action“>
<@s.textfield name=“username“>@s.textfield> <@s.textfield name=“password“>@s.textfield> <@s.submit value=“提交“/> @s.form>
登录用户名:${username}
注意:struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<@s.form>,jsp里是
security=JspTaglibs[\hs.g
pos
rr
ig
n/
gs
tfetrcpau:mr
i/et/
wwywo/rtwka.
\
<@security.authorize ifAnyGranted=\VE_RESOURCE\ /@security.authorize
Freemarker页面常用语法
A 概念
最常用的 3 个概念