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