Struts2+FreeMarker应用配置

Struts2+FreeMarker应用配置

1、配置说明
普通的struts2配置文件一般是这么配置的:
<action name="ChannelTypeMng" method="query" class="channelTypeMngAction">
<result name="success">/pages/channel/channelTypeMng.jsp</result>
</action>
这里的view是一个jsp页面,如果要改成freemarker模板页面,则改成如下配置:
<action name="ChannelTypeMngFTL" method="query"
class="channelTypeMngAction"
<result name="success" type="freemarker">/pages/channel/channelTypeMng.ftl</result>
</action>

如果需要在ftl模版文件里使用struts2的标签,则ftl模版文件里添加对strut2标签的引用:<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />。
引用前把struts2-core-2.0.x.x.jar包里的META-INF/struts-tags.tld 复制到工程的WEB-INF目录下。默认是不支持JspTaglibs的引用的,这里还需要一个额外的配置,修改web.xml,添加如下内容:
<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

2、一个简单的fm.ftl文件的例子:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</body>
<@s.form action="FilmMod" method="post"
enctype="multipart/form-data">
<@s.hidden name="resourceItemsSize" id="resourceItemsSize" />
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr class="blue">
<td width="16%">片源名称:</td>
<td width="33%"><@s.textfield name="filmName"
cssClass="input1 input5" /></td>
<td width="17%">导演:</td>
<td width="34%"><@s.textfield name="director"
cssClass="input1 input5" /></td>
</tr>
<tr>
<td>主演:</td>
<td><@s.textfield name="storring" cssClass="input1 input5" /></td>
<td>制片国家:</td>
<td><@s.textfield name="productionCountries"
cssClass="input1 input5" /></td>
</tr>
<tr class="blue">
<td>片源大类型:</td>
<td><@s.select name="kindId" id="kindId" list="filmKindItems"
onchange="loadOptions();" listKey="kindId" listValue="name"
headerKey="0" headerValue="--请选择--" /></td>
<td>片源海报:</td>
<td><@s.file name="posterFile" onchange="preview(this,150,100)" />
<div id="preview"></div>
</td>
</tr>
    </table>
</@s.form>
</body>
</html>
注意:struts2在freemarker页面中标签写法和jsp页面的写法不同,freemarker里是<@s.form>,jsp里是<s:form>,一定不要写错了!
现在就可以在struts2中正常使用freemarker了!

3、在freemarker使用struts2标签遇到的一些问题及解决办法:
3.1、<@s.property value="pageTurning" escape="false"/> freemarker中不能用escape属性,改成 ${pageTurning}即可,用JSP EL表达式。
3.2、<@s.select>标签中属性写法与freemarker有冲突
<@s.select id="releaseState" name="releaseState" list="#{1:'已发布',0:'未发布',-1:'已撤消'}" headerKey="" headerValue="--发布状态--"></@s.select>
以上的写法会出现异常,因为在Freemarker中,对#{}的使用有自己的含义:输出一个数字值,可以按照格式进行输出。例如:
<#assign x=2.582> <#-- 定义x的值为2.582 -->
#{x; m1M2} <#-- 输出2.58 -->
    针对以上现象,可改成如下:
    <@s.select id="releaseState" name="releaseState" list=r"#{1:'已发布',0:'未发布',-1:'已撤消'}" headerKey="" headerValue="--发布状态--"></@s.select>即可。
    list=r"#{1:'已发布',0:'未发布',-1:'已撤消'}" 加上r。即把#{1:'已发布',0:'未发布',-1:'已撤消'}当成纯字符串处理。

你可能感兴趣的:(freemarker)