FreeMarker 与 Struts2 的结合

使用 freemarker ,可以非常容易的用 ftl 文件来代替 jsp 文件,其他的架构不用变化。只需要在 SSH2 的基础上,添加额外配置:
1、添加jar包依赖:freemarker-x.x.x.jar
2、在 web.xml 中添加:

     < servlet>
            <servlet-name >freemarker </servlet-name >
            <servlet-class >
                freemarker.ext.servlet.FreemarkerServlet
            </servlet-class >
            <!-- FreemarkerServlet  设置: -->
            <init-param >
                 <param-name >TemplatePath </param-name >
                 <param-value >/ </param-value >
            </init-param >
            <init-param >
                 <param-name >NoCache </param-name >
                 <param-value >true </param-value >
            </init-param >
            <init-param >
                 <param-name >ContentType </param-name >
                 <param-value >text/html; charset=UTF-8</ param-value>

                 <!--    强制使用  UTF-8 作为输出编码格式!  -->
            </init-param >
            <!-- FreeMarker 设置: -->
            <init-param >
                 <param-name >template_update_delay </param-name >
                 <param-value >0 </param-value >
                 <!--  0  只对开发使用!  否则使用大一点的值. -->
            </init-param >
            <init-param >
                 <param-name >default_encoding </param-name >
                 <param-value >UTF-8 </param-value >
                 <!--  模板文件的编码方式. -->
            </init-param >
            <init-param >
                 <param-name >number_format </param-name >
                 <param-value >0.########## </param-value >
            </init-param >
            <load-on-startup >1 </load-on-startup >
      </servlet >
      <servlet-mapping >
            <servlet-name >freemarker </servlet-name >
            <url-pattern >*.ftl </url-pattern >
      </servlet-mapping >

配置完成。

一个小 demo:
1、新建两个实体(均省略了所有变量的 setter 和 getter 方法):
Group:

package freemarker.test.entity;

public class Group {
    private String name;

    ...
}

User:

package freemarker.test.entity;

import java.io.Serializable;

public class User implements Serializable {
      private int id;
    private String name;
    private int age;
    private Group group;
   
     ...
}

2、新建一个 action:

package ssh2.test.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;
import org.springframework.stereotype.Controller;

import freemarker.test.entity.Group;
import freemarker.test.entity.User;

@Controller
public class PersonAction {
      private String name1 = "AAAAA";
      public String getName1() {
            return name1;
     }
      public void setName1(String name1) {
            this. name1 = name1;
     }
      public String execute(){
           HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute( "name2", "BBBBB");

        Map<String, Object> map = new HashMap<String, Object>();

        Group group = new Group();
        group.setName( "IT");

        User user = new User();
        user.setId(001);
        user.setName( "张三");
        user.setAge(12);
        user.setGroup( group);

        List<User> users = new ArrayList<User>();
        users.add( user);
        users.add( user);
        users.add( user);

        map.put( "user", user);
        map.put( "users", users);
        request.setAttribute( "map", map);
        request.setAttribute( "user", user);
        request.setAttribute( "users", users);

            return "show";
     }
}

3、struts.xml 中添加一个 action:

      <package name = "person" namespace= "/person" extends= "struts-default" >
          <action name = "show" class= "personAction">
               <result name = "show" type= "freemarker" >/WEB-INF/ftl/person.ftl </result >
          </action >
      </package >

注意,返回页面是 .ftl 格式的。

4、返回页面 person.ftl :

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
Hello, my name is ${name!"default"}.</br>
访问私有变量:name1=${name1}</br>
访问 request 中的变量:name2=${name2} </br>
访问 request 中的映射: ${map.user.group.name}</br>
访问 request 中的集合:
</br>
<#list users as user>
- ${user.name}</br>
</#list>
</body>
</html>


输出:

函数私有变量(含有 getter 方法)和上下文中的变量,都可以被返回页面访问到。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值