[Freemarker] - 使用struts的component调用freemarker的ftl模板方法

时间:2022-09-29 11:10:30

struts中的component标签,可以用来调用freemarker的ftl模板文件,使用component标签传参可以这样写:

使用property方式写法:

    <s:component template="gridComponent.ftl" templateDir="/WEB-INF/template">
           <s:param name="grid" value="userss"></s:param>
    </s:component>

 

使用request的get/set attribute方法的写法:

    <s:component template="gridComponent.ftl" templateDir="/WEB-INF/template">
           <s:param name="grid" value="#request.users"></s:param>
    </s:component>

 

使用ftl读参数的方法:

<#assign s=JspTaglibs["/struts-tags"] />
<#assign req = parameters.grid />
<#list req as item>
    ${item["userName"]}
</#list>

 

普通的struts action:

package com.obs.actions.admin;

import java.util.List;

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

import com.obs.actions.BaseAdminActionSupport;
import com.obs.actions.bean.User;
import com.obs.util.Common;

@Controller
@SuppressWarnings("serial")
/*@Namespace("/admin")
@Results({
    @Result(name="success", location="/WEB-INF/view/admin/user.jsp")
})*/
public class UserAction extends BaseAdminActionSupport {
    
    private List<User> userss;
    
    public List<User> getUserss() {
        return userss;
    }

    public void setUserss(List<User> userss) {
        this.userss = userss;
    }

    /**
     * 页面默认执行action
     */
    @Override
    public String execute() throws Exception {
        // 取得所有用户
        List<com.obs.service.bean.User> userList = super.userService.findUsers();
        // 复制bean
        List<User> users = Common.copyProperties(userList, User.class);
        userss = users;
        // 将action bean设置到页面
        ServletActionContext.getRequest().setAttribute("users", users);
        
        return SUCCESS;
    }

}

 

userss是property,users是request的attribute.


 

ftl文件需要在/WEB-INF目录下新建文件夹:/template/simple

把gridComponent.ftl放在这。不然会报错。

 

需要修改这个template路径的话,修改struts.xml的这个位置:

<constant name="struts.ui.theme" value="simple" />