You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/10/31 06:49:31 UTC
svn commit: r709355 - in
/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view:
jsp/VelocityViewTag.java velocity.properties
Author: nbubna
Date: Thu Oct 30 22:49:31 2008
New Revision: 709355
URL: http://svn.apache.org/viewvc?rev=709355&view=rev
Log:
add very basic support for bodyContent template caching under default StringResourceLoader settings only (until we require Engine 1.6)
Modified:
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/jsp/VelocityViewTag.java
velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/velocity.properties
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/jsp/VelocityViewTag.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/jsp/VelocityViewTag.java?rev=709355&r1=709354&r2=709355&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/jsp/VelocityViewTag.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/jsp/VelocityViewTag.java Thu Oct 30 22:49:31 2008
@@ -27,6 +27,7 @@
import javax.servlet.jsp.tagext.BodyTagSupport;
import org.apache.velocity.Template;
import org.apache.velocity.app.VelocityEngine;
+import org.apache.velocity.runtime.resource.loader.StringResourceLoader;
import org.apache.velocity.tools.view.ServletUtils;
import org.apache.velocity.tools.view.ViewToolContext;
import org.apache.velocity.tools.view.VelocityView;
@@ -61,6 +62,8 @@
protected String scope;
protected String template;
protected String bodyContentKey = DEFAULT_BODY_CONTENT_KEY;
+ private boolean cacheable = true;
+ private boolean uncached = true;
public VelocityViewTag()
{
@@ -240,14 +243,27 @@
protected void renderBody(Writer out) throws Exception
{
- VelocityEngine engine = getVelocityView().getVelocityEngine();
+ // if it hasn't been cached, try that
+ if (uncached && cacheable)
+ {
+ cache(getId(), getBodyContent().getString());
+ }
+ // if it can't be cached, eval it
+ if (!cacheable)
+ {
+ evalBody(out);
+ }
+ else
+ {
+ // load template from cache
+ Template template = getVelocityView().getTemplate(getId());
+ template.merge(getViewToolContext(), out);
+ }
+ }
- /*
- * Eventually, it'd be nice to utilize some AST caching here.
- * But that will likely need to wait until the StringResourceLoader
- * is ready for general use (Velocity 1.6), unless we want to
- * duplicate that minimally here in Tools 2.0
- */
+ protected void evalBody(Writer out) throws Exception
+ {
+ VelocityEngine engine = getVelocityView().getVelocityEngine();
engine.evaluate(getViewToolContext(), out, getId(),
getBodyContent().getReader());
}
@@ -277,4 +293,17 @@
throw new IllegalArgumentException("Unknown scope: "+scope);
}
+ private void cache(String name, String template)
+ {
+ try
+ {
+ StringResourceLoader.getRepository().putStringResource(name, template);
+ uncached = false;
+ }
+ catch (Exception cnfe)
+ {
+ cacheable = false;
+ }
+ }
+
}
Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/velocity.properties
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/velocity.properties?rev=709355&r1=709354&r2=709355&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/velocity.properties (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/velocity.properties Thu Oct 30 22:49:31 2008
@@ -18,6 +18,7 @@
# default to servletlogger, which logs to the servlet engines log
runtime.log.logsystem.class = org.apache.velocity.runtime.log.ServletLogChute,org.apache.velocity.tools.view.ServletLogChute
-# by default, load resources with webapp resource loader
-resource.loader = webapp
+# by default, load resources with webapp resource loader and string resource loader (in that order)
+resource.loader = webapp,string
webapp.resource.loader.class = org.apache.velocity.tools.view.WebappResourceLoader
+string.resource.loader.class = org.apache.velocity.runtime.resource.loader.StringResourceLoader