【问题标题】:Tiles with XSLT - Struts 2使用 XSLT 的平铺 - Struts 2
【发布时间】:2013-07-01 11:18:58
【问题描述】:

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

在struts.xml 中,我将动作结果重定向到一个tile 文件,它正在渲染一个JSP 文件。

现在我想做的是,我想在应用 XSLT 之后呈现页面。 XSLT 不在物理文件中,它在数据库中作为字符串。

怎么做!

【问题讨论】:

    标签: xml xslt struts2 tiles


    【解决方案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

    视图准备器的执行方法是“与一个 tile 关联并在包含该 tile 之前立即调用的方法”。这听起来像是你想要的。

    所以你也许可以只创建一个视图 perparer 并坚持使用 xml。但是,当测试能够以编程方式设置事物(可能进行测试)而不是坚持使用 xml 定义时,这很好,此代码已包含在其中,它目前与查看器解析器没有任何关系(尽管我应该认为可以补救)。

    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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2011-08-21
      • 2017-04-05
      相关资源
      最近更新 更多