2013-07-01 8 views
2

Mon application utilise Struts2 et les tuiles pour le frontal. Maintenant, j'ai besoin de modifier le code HTML en utilisant XSLTTuiles avec XSLT - Struts 2

Dans le fichier struts.xml, je redirige le résultat de l'action vers un fichier de tuiles et il rend un fichier JSP.

Maintenant, ce que je veux faire est, je veux rendre les pages, après avoir appliqué XSLT. Le fichier XSLT n'est pas dans un fichier physique et son dans la base de données en tant que chaîne.

Comment faire ceci!

Répondre

1

Je ne sais pas comment faire. Mais pour fournir un code utile je vais le mettre dans ce champ de réponse.

Outre l'utilisation de tiles xml, vous pouvez également créer des définitions par programmation (un exemple de cela sera fourni plus loin). Il est même possible d'utiliser un nouveau type de résultat struts2: voici une discussion de cela: https://issues.apache.org/jira/browse/WW-3937 (avec du code à cet effet).

Il est possible d'utiliser un ViewPreparer avec des tuiles: http://tiles.apache.org/framework/apidocs/org/apache/tiles/preparer/ViewPreparer.html

La méthode execute de la vue préparateur est « méthode associée à une tuile et appelé immédiatement avant la tuile est inclus. » Cela ressemble à quelque chose que vous voulez.

Donc, vous pourriez être en mesure de créer simplement une vue perparer et simplement coller à xml. Mais il est agréable de tester des choses pour pouvoir programmer les choses (éventuellement pour tester) plutôt que de s'en tenir aux définitions xml. Ce code a été inclus à cet effet, il n'a rien à voir avec un viewperparer actuellement (bien que je devrais pense que cela pourrait être corrigé).

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