关于Freemarker在struts2中的使用
2013-12-12 10:51
302 查看
Struts使用FreeMarker作为其默认的模板技术,因此Struts2对FreeMarker的支持非常良好。因此,为了Struts2应用中使用FreeMarker模板技术,只需要在struts.xml文件中进行简单配置即可。
由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。
1.要在FreeMarker模板使用标签库,只要四步,如下:
(1)解压struts2-core-X.X.X.jar文件,把在META-INF文件夹下面的struts-tags.tld文件复制到WEB-INF文件夹下。
(2)在web.xml文件中启动JSPSupportServlet.代码如下:
<servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet>
(3)在FreeMarker模板中使用assign指令导入标签库。代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:这里我把struts-tags.tld放在WEB-INF下面
(4)现在我们可以在FreeMarker模板中使用标签了,示例代码如下:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<@s.form action="login">
<@s.textfield name="username" label="username"/>
<@s.submit value="login" />
</@s.form >
虽然这样说明,相信我们还是一头雾水,下面我们将以一下简单的实例来指导大家真正会用FreeMarker.
2.登录示例:
(1)在WEB-INF文件夹下面建立一个名为ftl的文件夹,其实就是FreeMarker容器,我们把所有的ftl文件都放在里面。
现在我们先在下面建立三个名字分别为login.ftl,welcome.ftl,showinfo.ftl的文件。
login.ftl代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<html>
<head>
<title>Login Form</title>
</head>
<body>
please input username and password login<br>
<@s.form action="Login.action">
<@s.textfield name="username" label="username"/>
<@s.password name="password" label="password" />
<@s.submit value="submit" />
</@s.form >
</body>
</html>
welcome.ftl代码如下:
<html>
<head>
<title>Success</title>
</haed>
<body>
WelCome,${username},you logined!<br>
<a href="ShowInfo.action">Show Information</a>
</body>
</html>
showinfo.ftl代码如下:
<html>
<head>
<title>User Information</title>
<body>
<table border="1" width="360">
<caption>User Information</caption>
<tr>
<td>username:</td>
<td>${username}</td>
</tr>
<tr>
<td>sex:</td>
<td>${sex}</td>
</tr>
<tr>
<td>age:</td>
<td>${age}</td>
</tr>
</table>
</body>
</html>
(2)从上面的ftl中我们可以看出,我们必须建立两个Action。
我是在com.test.action包下建立Action的。
LoginAction.java代码如下:
ShowInfo.java代码如下:
上面我们已经把所需要的Actions写好啦。
(3)剩下的就是配置文件啦,也就是struts.xml
代码片段如下:
<!-- 因为浏览者无法直接访问WEB-INF/ftl路径下的资源,所以我们在struts.xml文件中配置下面片段代码。
也就是配置了一个能匹配所有请求的Action,该Action被映射到一个动态Result.
-->
<action name="*">
<result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>
</action>
<!-- define a LoginAction -->
<action name="Login" class="com.test.action.LoginAction">
<result name="error" type="freemarker">/WEB-INF/ftl/error.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/welcome.ftl</result>
</action>
<action name="GetBooks" class="com.test.action.GetBooksAction">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showBook.ftl</result>
</action>
<action name="ShowInfo" class="com.test.action.ShowInfo">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showinfo.ftl</result>
</action>
由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。
1.要在FreeMarker模板使用标签库,只要四步,如下:
(1)解压struts2-core-X.X.X.jar文件,把在META-INF文件夹下面的struts-tags.tld文件复制到WEB-INF文件夹下。
(2)在web.xml文件中启动JSPSupportServlet.代码如下:
<servlet>
<!-- define a JspSupportServlet Object -->
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<!-- setting JspSupportServlet auto start -->
<load-on-startup>1</load-on-startup>
</servlet>
(3)在FreeMarker模板中使用assign指令导入标签库。代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:这里我把struts-tags.tld放在WEB-INF下面
(4)现在我们可以在FreeMarker模板中使用标签了,示例代码如下:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<@s.form action="login">
<@s.textfield name="username" label="username"/>
<@s.submit value="login" />
</@s.form >
虽然这样说明,相信我们还是一头雾水,下面我们将以一下简单的实例来指导大家真正会用FreeMarker.
2.登录示例:
(1)在WEB-INF文件夹下面建立一个名为ftl的文件夹,其实就是FreeMarker容器,我们把所有的ftl文件都放在里面。
现在我们先在下面建立三个名字分别为login.ftl,welcome.ftl,showinfo.ftl的文件。
login.ftl代码如下
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<html>
<head>
<title>Login Form</title>
</head>
<body>
please input username and password login<br>
<@s.form action="Login.action">
<@s.textfield name="username" label="username"/>
<@s.password name="password" label="password" />
<@s.submit value="submit" />
</@s.form >
</body>
</html>
welcome.ftl代码如下:
<html>
<head>
<title>Success</title>
</haed>
<body>
WelCome,${username},you logined!<br>
<a href="ShowInfo.action">Show Information</a>
</body>
</html>
showinfo.ftl代码如下:
<html>
<head>
<title>User Information</title>
<body>
<table border="1" width="360">
<caption>User Information</caption>
<tr>
<td>username:</td>
<td>${username}</td>
</tr>
<tr>
<td>sex:</td>
<td>${sex}</td>
</tr>
<tr>
<td>age:</td>
<td>${age}</td>
</tr>
</table>
</body>
</html>
(2)从上面的ftl中我们可以看出,我们必须建立两个Action。
我是在com.test.action包下建立Action的。
LoginAction.java代码如下:
ShowInfo.java代码如下:
上面我们已经把所需要的Actions写好啦。
(3)剩下的就是配置文件啦,也就是struts.xml
代码片段如下:
<!-- 因为浏览者无法直接访问WEB-INF/ftl路径下的资源,所以我们在struts.xml文件中配置下面片段代码。
也就是配置了一个能匹配所有请求的Action,该Action被映射到一个动态Result.
-->
<action name="*">
<result type="freemarker">/WEB-INF/ftl/{1}.ftl</result>
</action>
<!-- define a LoginAction -->
<action name="Login" class="com.test.action.LoginAction">
<result name="error" type="freemarker">/WEB-INF/ftl/error.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/welcome.ftl</result>
</action>
<action name="GetBooks" class="com.test.action.GetBooksAction">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showBook.ftl</result>
</action>
<action name="ShowInfo" class="com.test.action.ShowInfo">
<result name="login" type="freemarker">/WEB-INF/ftl/login.ftl</result>
<result name="success" type="freemarker">/WEB-INF/ftl/showinfo.ftl</result>
</action>
相关文章推荐
- Struts2中关于Session的使用
- struts2标签使用时产生异常:freemarker.core.InvalidReferenceException: Expression parameters.id is undefined
- Struts2_0800_DomainModelParamInput 关于用类实现参数 使用Domain Model接收参数
- 关于使用struts2与jsp时,使用prototype.js的$属性与jquery的$冲突问题
- 关于使用struts2-jquery-mobile-showcase插件报错的问题!!!
- 关于eclipse安装freemarker插件无效不能使用
- 关于使用struts2时子窗体页面跳转后在父窗体打开的问题以及Session过期后的页面跳转问题
- 关于使用FreeMarker如何做到在浏览器弹框选择地址?
- 关于在FreeMarker中使用EL表达式
- 关于UtilTimerStack类的使用--XWork2、Struts2内置性能诊断类 --只为学习
- 关于在Struts2的Action中使用domain模型接收参数的问题
- 关于struts2使用模型形驱动,在页面上怎样取得值
- struts2中关于action的使用说明
- 关于经典开源框架STRUTS2的使用
- 关于freemarker里面的hashmap使用问题
- 关于在Hibernate、Struts2中使用Clob数据类型
- 在使用struts2的freemarker开发portlet时遇到问题
- Struts2中使用FreeMarker充当表现层
- 关于找不到类org.apache.struts2.sitemesh.FreemarkerPageFilter java.lang.ClassNotFoundException: org.apache.
- struts2中s:select标签在freemarker中的使用