You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2016/01/10 12:22:05 UTC
[07/16] struts git commit: Registers Tiles model (cherry picked from
commit 388861f)
Registers Tiles model
(cherry picked from commit 388861f)
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/f19e4be9
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/f19e4be9
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/f19e4be9
Branch: refs/heads/support-2-3
Commit: f19e4be947c00511a91ea2d806c9c483694f7485
Parents: 913944b
Author: Lukasz Lenart <lu...@gmail.com>
Authored: Fri Nov 27 13:36:52 2015 +0100
Committer: Lukasz Lenart <lu...@gmail.com>
Committed: Sat Nov 28 15:36:28 2015 +0100
----------------------------------------------------------------------
.../StrutsFreeMarkerAttributeRenderer.java | 27 +++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/f19e4be9/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsFreeMarkerAttributeRenderer.java
----------------------------------------------------------------------
diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsFreeMarkerAttributeRenderer.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsFreeMarkerAttributeRenderer.java
index 032f7e6..849053a 100644
--- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsFreeMarkerAttributeRenderer.java
+++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsFreeMarkerAttributeRenderer.java
@@ -23,18 +23,25 @@ import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.inject.Container;
+import freemarker.ext.beans.BeanModel;
+import freemarker.template.Configuration;
import freemarker.template.TemplateException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.views.JspSupportServlet;
+import org.apache.struts2.views.freemarker.FreemarkerManager;
import org.apache.struts2.views.freemarker.FreemarkerResult;
+import org.apache.struts2.views.freemarker.StrutsBeanWrapper;
import org.apache.tiles.Attribute;
import org.apache.tiles.context.TilesRequestContext;
+import org.apache.tiles.freemarker.template.TilesFMModelRepository;
import org.apache.tiles.impl.InvalidTemplateException;
import org.apache.tiles.renderer.impl.AbstractTypeDetectingAttributeRenderer;
import org.apache.tiles.servlet.context.ServletTilesRequestContext;
import org.apache.tiles.servlet.context.ServletUtil;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
@@ -55,7 +62,8 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
if (ctx == null) {
throw new ConfigurationException("There is no ActionContext for current request!");
}
- ActionInvocation invocation = ctx.getActionInvocation();
+
+ registerTilesBeanModel(ctx);
String include = (String) value;
FreemarkerResult result = new FreemarkerResult(include);
@@ -65,6 +73,7 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
container.inject(result);
try {
+ ActionInvocation invocation = ctx.getActionInvocation();
result.doExecute(include, invocation);
} catch (TemplateException e) {
LOG.error("Exception was thrown during rendering value {}: {}", value, e.getMessage());
@@ -88,4 +97,20 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
return false;
}
+ /**
+ * This register dedicated BeanModel to support tiles tags.
+ * It requires {@link org.apache.struts2.views.JspSupportServlet} to be registered in web.xml
+ */
+ protected void registerTilesBeanModel(ActionContext ctx) {
+ ServletContext servletContext = ServletActionContext.getServletContext();
+ Configuration configuration = ctx.getInstance(FreemarkerManager.class).getConfiguration(servletContext);
+
+ StrutsBeanWrapper wrapper = (StrutsBeanWrapper) ctx.getInstance(FreemarkerManager.class).getWrapper();
+
+ LOG.trace("Adding support for Tiles tags, please remember to register {} in web.xml!", JspSupportServlet.class.getName());
+
+ BeanModel tilesBeanModel = new BeanModel(new TilesFMModelRepository(), wrapper);
+ configuration.setSharedVariable("tiles", tilesBeanModel);
+ }
+
}