2

私のアプリケーションは、フロント エンドに Struts2 と Tiles を使用しています。ここで、XSLT を使用して HTML を変更する必要があります

struts.xml では、アクションの結果をタイル ファイルにリダイレクトし、JSP ファイルをレンダリングしています。

今私がやりたいことは、XSLT を適用した後にページをレンダリングしたいということです。XSLT は物理ファイルではなく、DB に文字列として存在します。

これを行う方法!

4

1 に答える 1

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 定義に固執するのではなく、プログラムで物事をセットアップできるようにする (おそらくテストする) ことは素晴らしいことです。このコードはその効果のために含まれています。解決できると思います)。

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;
    }
}
于 2013-07-01T21:46:43.630 に答える