我的應用程序使用Struts2和Tiles作爲前端。現在,我需要使用XSLT修改HTMLTiles with XSLT - Struts 2
在struts.xml中,我將動作結果重定向到tiles文件,並且它正在渲染一個JSP文件。
現在我想要做的是,我想在應用XSLT之後渲染頁面。 XSLT不在物理文件中,並且它在數據庫中作爲字符串。
如何做到這一點!
我的應用程序使用Struts2和Tiles作爲前端。現在,我需要使用XSLT修改HTMLTiles with XSLT - Struts 2
在struts.xml中,我將動作結果重定向到tiles文件,並且它正在渲染一個JSP文件。
現在我想要做的是,我想在應用XSLT之後渲染頁面。 XSLT不在物理文件中,並且它在數據庫中作爲字符串。
如何做到這一點!
我不知道該怎麼做。但是爲了提供一些有用的代碼,我將把它放在這個答案字段中。
除了使用tiles xml以外,您還可以通過編程創建定義(稍後會提供一個示例)。甚至可以使用新的struts2結果類型:下面是對該結果的討論:https://issues.apache.org/jira/browse/WW-3937(以及代碼)。
它可以使用與瓷磚一個ViewPreparer:http://tiles.apache.org/framework/apidocs/org/apache/tiles/preparer/ViewPreparer.html
的執行視圖製備者的方法是「關聯到一個瓷磚和被包括在瓦片之前立即調用方法」。這聽起來像你想要的東西。
所以,你可能只是創建一個視圖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;
}
}