Struts2+FreeMarker应用配置

Struts2+FreeMarker应用配置

1、配置说明

普通的struts2配置文件一般是这么配置的:

<actionname="ChannelTypeMng"method="query"class="channelTypeMngAction">

<resultname="success">/pages/channel/channelTypeMng.jsp</result>

</action>

这里的view是一个jsp页面,如果要改成freemarker模板页面,则改成如下配置:

<actionname="ChannelTypeMngFTL"method="query"

class="channelTypeMngAction"

<resultname="success"type="freemarker">/pages/channel/channelTypeMng.ftl</result>

</action>

如果需要在ftl模版文件里使用struts2的标签,则ftl模版文件里添加对strut2标签的引用:<#assigns=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文件的例子:

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=gb2312"/>

</body>

<@s.formaction="FilmMod"method="post"

enctype="multipart/form-data">

<@s.hiddenname="resourceItemsSize"id="resourceItemsSize"/>

<tablewidth="100%"border="0"cellspacing="0"cellpadding="0">

<trclass="blue">

<tdwidth="16%">片源名称:</td>

<tdwidth="33%"><@s.textfieldname="filmName"

cssclass="input1input5"/></td>

<tdwidth="17%">导演:</td>

<tdwidth="34%"><@s.textfieldname="director"

cssclass="input1input5"/></td>

</tr>

<tr>

<td>主演:</td>

<td><@s.textfieldname="storring"cssclass="input1input5"/></td>

<td>制片国家:</td>

<td><@s.textfieldname="productionCountries"

cssclass="input1input5"/></td>

</tr>

<trclass="blue">

<td>片源大类型:</td>

<td><@s.selectname="kindId"id="kindId"list="filmKindItems"

onchange="loadOptions();"listKey="kindId"listValue="name"

headerKey="0"headerValue="--请选择--"/></td>

<td>片源海报:</td>

<td><@s.filename="posterFile"onchange="preview(this,150,100)"/>

<divid="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.propertyvalue="pageTurning"escape="false"/>freemarker中不能用escape属性,改成${pageTurning}即可,用JSPEL表达式。

3.2、<@s.select>标签中属性写法与freemarker有冲突

<@s.selectid="releaseState"name="releaseState"list="#{1:'已发布',0:'未发布',-1:'已撤消'}"headerKey=""headerValue="--发布状态--"></@s.select>

以上的写法会出现异常,因为在Freemarker中,对#{}的使用有自己的含义:输出一个数字值,可以按照格式进行输出。例如:

<#assignx=2.582><#--定义x的值为2.582-->

#{x;m1M2}<#--输出2.58-->

针对以上现象,可改成如下:

<@s.selectid="releaseState"name="releaseState"list=r"#{1:'已发布',0:'未发布',-1:'已撤消'}"headerKey=""headerValue="--发布状态--"></@s.select>即可。

list=r"#{1:'已发布',0:'未发布',-1:'已撤消'}"加上r。即把#{1:'已发布',0:'未发布',-1:'已撤消'}当成纯字符串处理。

相关推荐