mirror of
https://github.com/apache/struts.git
synced 2026-08-31 19:35:40 +00:00
Registers Tiles model
This commit is contained in:
+26
-1
@@ -23,18 +23,25 @@ import com.opensymphony.xwork2.ActionContext;
|
|||||||
import com.opensymphony.xwork2.ActionInvocation;
|
import com.opensymphony.xwork2.ActionInvocation;
|
||||||
import com.opensymphony.xwork2.config.ConfigurationException;
|
import com.opensymphony.xwork2.config.ConfigurationException;
|
||||||
import com.opensymphony.xwork2.inject.Container;
|
import com.opensymphony.xwork2.inject.Container;
|
||||||
|
import freemarker.ext.beans.BeanModel;
|
||||||
|
import freemarker.template.Configuration;
|
||||||
import freemarker.template.TemplateException;
|
import freemarker.template.TemplateException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.apache.struts2.ServletActionContext;
|
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.FreemarkerResult;
|
||||||
|
import org.apache.struts2.views.freemarker.StrutsBeanWrapper;
|
||||||
import org.apache.tiles.Attribute;
|
import org.apache.tiles.Attribute;
|
||||||
import org.apache.tiles.context.TilesRequestContext;
|
import org.apache.tiles.context.TilesRequestContext;
|
||||||
|
import org.apache.tiles.freemarker.template.TilesFMModelRepository;
|
||||||
import org.apache.tiles.impl.InvalidTemplateException;
|
import org.apache.tiles.impl.InvalidTemplateException;
|
||||||
import org.apache.tiles.renderer.impl.AbstractTypeDetectingAttributeRenderer;
|
import org.apache.tiles.renderer.impl.AbstractTypeDetectingAttributeRenderer;
|
||||||
import org.apache.tiles.servlet.context.ServletTilesRequestContext;
|
import org.apache.tiles.servlet.context.ServletTilesRequestContext;
|
||||||
import org.apache.tiles.servlet.context.ServletUtil;
|
import org.apache.tiles.servlet.context.ServletUtil;
|
||||||
|
|
||||||
|
import javax.servlet.ServletContext;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@@ -55,7 +62,8 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
|
|||||||
if (ctx == null) {
|
if (ctx == null) {
|
||||||
throw new ConfigurationException("There is no ActionContext for current request!");
|
throw new ConfigurationException("There is no ActionContext for current request!");
|
||||||
}
|
}
|
||||||
ActionInvocation invocation = ctx.getActionInvocation();
|
|
||||||
|
registerTilesBeanModel(ctx);
|
||||||
|
|
||||||
String include = (String) value;
|
String include = (String) value;
|
||||||
FreemarkerResult result = new FreemarkerResult(include);
|
FreemarkerResult result = new FreemarkerResult(include);
|
||||||
@@ -65,6 +73,7 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
|
|||||||
container.inject(result);
|
container.inject(result);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
ActionInvocation invocation = ctx.getActionInvocation();
|
||||||
result.doExecute(include, invocation);
|
result.doExecute(include, invocation);
|
||||||
} catch (TemplateException e) {
|
} catch (TemplateException e) {
|
||||||
LOG.error("Exception was thrown during rendering value {}: {}", value, e.getMessage());
|
LOG.error("Exception was thrown during rendering value {}: {}", value, e.getMessage());
|
||||||
@@ -88,4 +97,20 @@ public class StrutsFreeMarkerAttributeRenderer extends AbstractTypeDetectingAttr
|
|||||||
return false;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user