2013-07-01 46 views
2

我的應用程序使用Struts2和Tiles作爲前端。現在,我需要使用XSLT修改HTMLTiles with XSLT - Struts 2

在struts.xml中,我將動作結果重定向到tiles文件,並且它正在渲染一個JSP文件。

現在我想要做的是,我想在應用XSLT之後渲染頁面。 XSLT不在物理文件中,並且它在數據庫中作爲字符串。

如何做到這一點!

回答

1

我不知道該怎麼做。但是爲了提供一些有用的代碼,我將把它放在這個答案字段中。

除了使用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; 
    } 
}