使用XSLT的Tiles - Struts 2

时间:2013-07-01 11:18:58

标签: xml xslt struts2 tiles

我的应用程序使用Struts2和Tiles作为前端。现在,我需要使用XSLT修改HTML

在struts.xml中,我将动作结果重定向到tiles文件,并呈现JSP文件。

现在我想做的是,我想在应用XSLT之后渲染页面。 XSLT不在物理文件中,而在DB中作为字符串。

怎么做!

1 个答案:

答案 0 :(得分:1)

我不知道该怎么做。但是为了提供一些有用的代码,我将把它放在这个答案字段中。

除了使用tile xml之外,您还可以编程创建定义(稍后将提供此示例)。甚至可以使用新的struts2结果类型:这里讨论的是:https://issues.apache.org/jira/browse/WW-3937(以及该效果的代码)。

可以使用带有图块的ViewPreparer:http://tiles.apache.org/framework/apidocs/org/apache/tiles/preparer/ViewPreparer.html

view preparer的execute方法是“与tile关联的方法,并在包含tile之前立即调用”。这听起来像你想要的东西。

所以你可以创建一个视图perparer并坚持使用xml。但是,当测试事物能够以编程方式设置(可能测试)而不是坚持xml定义时,这很好,这个代码已被包含在内,因为它目前没有与viewperparer有任何关系(虽然我应该认为可以补救)。

package com.kenmcwilliams.employmentsystem.action.test;

import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Result;
import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.mgmt.MutableTilesContainer;
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.servlet.ServletRequest;
import org.apache.tiles.request.servlet.ServletUtil;

/**
 *
 * @author ken
 */
@Result(type = "tiles", location = "dynamic-tiles-definition")
public class DynamicTilesDefinition extends ActionSupport {

    @Override
    public String execute() throws Exception {
        ServletContext context = ServletActionContext.getServletContext();
        ApplicationContext applicationContext = ServletUtil.getApplicationContext(context);
        TilesContainer container = TilesAccess.getContainer(applicationContext);
        if (container instanceof MutableTilesContainer) {
        } else {
            throw new Exception("A Mutable Tiles Container is required [TODO: Write example web.xml code example]");
        }
        MutableTilesContainer mc = (MutableTilesContainer) container;
        Definition def = new Definition();

        Attribute templateAttribute = Attribute.createTemplateAttribute("/WEB-INF/test/test-template.jsp");
        def.setTemplateAttribute(templateAttribute);
        def.putAttribute("body", new Attribute("/WEB-INF/test/test-dynamic-definition.jsp"));
        def.setName("dynamic-tiles-definition");

        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        ServletRequest servletRequest = new ServletRequest(applicationContext, request, response);

        mc.register(def, servletRequest);
        return SUCCESS;
    }
}