freemarker中文手册 下载本文

4.1在FreeMarker模板中使用Struts2标签

在FreeMarker模板中使用标签毕竟不同于在JSP页面中使用标签,因为FreeMarker不支持使用taglib指令来导入标签库.但Struts2为了在FreeMarker模板中使用标签库提供了额外的支持.可以按照下面的步骤进行:

1,将系统所需要的标签库定义文件(.tld文件)复制到WEB-INF目录下,对于

Struts2,则是复制

struts2-core-2.0.11.2.jar

中的

META-INF\\struts-tags.tld文件

2,在web.xml文件中启动JspSupportServlet.为了启动它,则应该在web.xml文件中增加如下配置片段:

JspSupportServlet

org.apache.struts2.views.JspSupportServlet

1

3,在FreeMarker模板中使用assign指令导入标签库,导入标签库的代码如下:

<#-- 定义/WEB-INF/struts-tags.tld文件对应的标签库前缀为s --> <#assign s=JspTaglibs[\

4,在FreeMarker模板中增加了标签库的定义之后就可以使用了,下面是在FreeMarker模板中使用标签的代码: <#-- 在FreeMarker中使用Struts2标签 --> <@s.form action=\

<@s.textfield name=\用户名\<@s.textfield name=\密码\<@s.submit value=\提交\

如果是在JSP中使用Struts2标签,则格式如下:

值得注意的是,我们不能通过浏览器直接访问.ftl文件,否则将看到该模板页面的源代码,而不是我们想要的生成的HTML页面.这是因为Web容器默认不会处理FreeMarker模板页面.

在Struts2框架下,Struts2框架充当了之前的Servlet角色,只要浏览器的请求经过Struts2处理后,Struts2都会自动加载FreeMarker模板,并使用数据模型来填充该模板,再将最后的HTML页面输出给客户端.为了让所有的用户请求都经过Struts2的处理,这里将所有的FreeMarker模板放在WEB-INF\\ftl目录下.(WEB-INF目录下的所有文件客户端都是

不能直接访问的),因为浏览器无法访问.ftl文件了,因此我们在struts.xml配置文件中增加如下配置:

国为增加了上面的配置,在浏览器中请求login.action的时候,该action会被转向login.ftl模板.此时就可以看到返回的HTML页面. 4.2 使用FreeMarker的Result

从前面我们可以看到,使用FreeMarker与使用JSP作为输出文件并没有太大区别,下面来看看刚才的应用中Action中的代码: package lee;

import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; public class LoginAction implements Action {

private String username; private String password; public String getUsername() {

return username; }

public void setUsername(String username) {

this.username = username; }

public String getPassword() {

return password; }

public void setPassword(String password) {

this.password = password; }

public String execute() throws Exception {

if (getUsername().equals(\ && getPassword().equals(\ {

ActionContext.getContext().getSession().put(\getUsername());//这句很重要。 return SUCCESS; } else

,