Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT-Struts 2平铺_Xml_Xslt_Struts2_Tiles - Fatal编程技术网

Xml 使用XSLT-Struts 2平铺

Xml 使用XSLT-Struts 2平铺,xml,xslt,struts2,tiles,Xml,Xslt,Struts2,Tiles,我的应用程序使用Struts2和Tiles作为前端。现在,我需要使用XSLT修改HTML 在struts.xml中,我将操作结果重定向到一个tiles文件,并呈现一个JSP文件 现在我要做的是,在应用XSLT之后,呈现页面。XSLT不在物理文件中,它在数据库中以字符串形式存在 如何做到这一点 我不知道怎么做。但是为了提供一些有用的代码,我将把它放在这个答案字段中 除了使用tiles xml,您还可以通过编程创建定义(稍后将提供一个示例)。甚至可以使用一个新的struts2结果类型:下面是对它的讨

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

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

现在我要做的是,在应用XSLT之后,呈现页面。XSLT不在物理文件中,它在数据库中以字符串形式存在


如何做到这一点

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

除了使用tiles xml,您还可以通过编程创建定义(稍后将提供一个示例)。甚至可以使用一个新的struts2结果类型:下面是对它的讨论:(以及实现这一效果的代码)

可以将ViewPreparer与平铺一起使用:

视图准备程序的execute方法是“与tile关联并在包含tile之前立即调用的方法”。这听起来像是您想要的

因此,您可能只需要创建一个视图parer,并坚持使用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;
    }
}