FreeMarker作为Struts2的视图

83487414 2010-03-03

Struts使用FreeMarker作为其默认的模板技术,因此Struts2对FreeMarker的支持非常良好。因此,为了Struts2应用中使用FreeMarker模板技术,只需要在struts.xml文件中进行简单配置即可。

由于FreeMarker自供的FTL指令的能力非常有限,让我们编写一些相对复杂的界面里有点力不从心。不过不用担心,Struts2已经为我们提供了额外的标签库的支持。要在FreeMarker模板使用标签库,只要四步,如下:

1.解压struts2-core-X.X.X.jar文件,把在META-INF文件夹下面的struts-tags.tld文件复制到WEB-INF文件夹下。

2.在web.xml文件中启动JSPSupportServlet.代码如下:

<servlet>

<!--defineaJspSupportServletObject-->

<servlet-name>JspSupportServlet</servlet-name>

<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>

<!--settingJspSupportServletautostart-->

<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.formaction="login">

<@s.textfieldname="username"label="username"/>

<@s.submitvalue="login"/>

</@s.form>

 虽然这样说明,相信我们还是一头雾水,下面我们将以一下简单的实例来指导大家真正会用FreeMarker.

下面是一个登录的示例:

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>LoginForm</title>

</head>

<body>

pleaseinputusernameandpasswordlogin<br>

<@s.formaction="Login.action">

<@s.textfieldname="username"label="username"/>

<@s.passwordname="password"label="password"/>

<@s.submitvalue="submit"/>

</@s.form>

</body>

</html>

welcome.ftl代码如下:

<html>

<head>

<title>Success</title>

</haed>

<body>

WelCome,${username},youlogined!<br>

<ahref="ShowInfo.action">ShowInformation</a>

</body>

</html>

showinfo.ftl代码如下:

<html>

<head>

<title>UserInformation</title>

<body>

<tableborder="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代码如下:

FreeMarker作为Struts2的视图

ShowInfo.java代码如下:

FreeMarker作为Struts2的视图

上面我们已经把所需要的Actions写好啦。

3.剩下的就是配置文件啦,也就是struts.xml

代码片段如下:

<!-- 因为浏览者无法直接访问WEB-INF/ftl路径下的资源,所以我们在struts.xml文件中配置下面片段代码。

也就是配置了一个能匹配所有请求的Action,该Action被映射到一个动态Result.

   -->

  <action name="*">

<resulttype="freemarker">/WEB-INF/ftl/{1}.ftl</result>

  </action>

<!--defineaLoginAction-->

<actionname="Login"class="com.test.action.LoginAction">

<resultname="error"type="freemarker">/WEB-INF/ftl/error.ftl</result>

<resultname="success"type="freemarker">/WEB-INF/ftl/welcome.ftl</result>

</action>

<actionname="GetBooks"class="com.test.action.GetBooksAction">

<resultname="login"type="freemarker">/WEB-INF/ftl/login.ftl</result>

<resultname="success"type="freemarker">/WEB-INF/ftl/showBook.ftl</result>

</action>

<actionname="ShowInfo"class="com.test.action.ShowInfo">

<resultname="login"type="freemarker">/WEB-INF/ftl/login.ftl</result>

<resultname="success"type="freemarker">/WEB-INF/ftl/showinfo.ftl</result>

  </action>

到现在为止,我们的示例已经全部写好啦,接焉就是我们要启动Tomcat,打开IE,在地址栏上输入:http://localhost:8080/struts2/login.action就可以看到该示例的效果。

上面虽然是一个很简单的示例,但用来入门应该算不错,希望大家继续加深对FreeMarker的认识。

相关推荐

sunh / 0评论 2013-06-19