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:'已撤消'}当成纯字符串处理。