You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/07/04 07:44:16 UTC
[05/16] incubator-freemarker git commit: FREEMARKER-55: Adding test
for Application attributes.
FREEMARKER-55: Adding test for Application attributes.
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/8e8c724b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/8e8c724b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/8e8c724b
Branch: refs/heads/3
Commit: 8e8c724b6f2ae003c67c4bc0c41fb026c0b9f6ad
Parents: 36b0694
Author: Woonsan Ko <wo...@apache.org>
Authored: Thu Jun 29 01:21:40 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Thu Jun 29 01:21:40 2017 -0400
----------------------------------------------------------------------
.../spring/web/view/FreemarkerView.java | 93 +++++++++++++++++++-
.../spring/web/view/FreemarkerViewTest.java | 10 +--
2 files changed, 95 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8e8c724b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
index 21b2a60..934a458 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/FreemarkerView.java
@@ -18,8 +18,17 @@
*/
package org.apache.freemarker.spring.web.view;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.Map;
+import javax.servlet.GenericServlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -35,12 +44,40 @@ import org.apache.freemarker.servlet.jsp.TaglibFactory;
public class FreemarkerView extends AbstractFreemarkerView {
+ private PageContextServletConfig pageContextServletConfig;
+
+ private PageContextServlet pageContextServlet;
+
private ServletContextHashModel servletContextModel;
private TaglibFactory taglibFactory;
+ public PageContextServlet getPageContextServlet() {
+ // TODO: proper locking...
+ if (pageContextServlet == null) {
+ pageContextServlet = new PageContextServlet();
+ pageContextServletConfig = new PageContextServletConfig(getServletContext(), getBeanName());
+
+ try {
+ pageContextServlet.init(pageContextServletConfig);
+ } catch (ServletException e) {
+ // never happen
+ }
+ }
+
+ return pageContextServlet;
+ }
+
+ public void setPageContextServlet(PageContextServlet pageContextServlet) {
+ this.pageContextServlet = pageContextServlet;
+ }
+
public ServletContextHashModel getServletContextModel() {
- // TODO
+ // TODO: proper locking...
+ if (servletContextModel == null) {
+ servletContextModel = new ServletContextHashModel(getPageContextServlet(), getObjectWrapperForModel());
+ }
+
return servletContextModel;
}
@@ -62,8 +99,10 @@ public class FreemarkerView extends AbstractFreemarkerView {
HttpServletRequest request, HttpServletResponse response) {
AllHttpScopesHashModel model = new AllHttpScopesHashModel(objectWrapperForModel, getServletContext(), request);
model.putUnlistedModel(FreemarkerServlet.KEY_APPLICATION, getServletContextModel());
- model.putUnlistedModel(FreemarkerServlet.KEY_SESSION, getHttpSessionModel(objectWrapperForModel, request, response));
- model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST, new HttpRequestHashModel(request, response, objectWrapperForModel));
+ model.putUnlistedModel(FreemarkerServlet.KEY_SESSION,
+ getHttpSessionModel(objectWrapperForModel, request, response));
+ model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST,
+ new HttpRequestHashModel(request, response, objectWrapperForModel));
model.putUnlistedModel(FreemarkerServlet.KEY_REQUEST_PARAMETERS,
new HttpRequestParametersHashModel(request, objectWrapperForModel));
model.putUnlistedModel(FreemarkerServlet.KEY_JSP_TAGLIBS, getTaglibFactory());
@@ -77,4 +116,52 @@ public class FreemarkerView extends AbstractFreemarkerView {
HttpSessionHashModel sessionModel = new HttpSessionHashModel(null, request, response, objectWrapperForModel);
return sessionModel;
}
+
+ /**
+ * Extending {@link GenericServlet} for {@link PageContext#getPage()} in JSP Tag Library support.
+ */
+ @SuppressWarnings("serial")
+ private static class PageContextServlet extends GenericServlet {
+
+ @Override
+ public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
+ // Do nothing
+ }
+
+ }
+
+ /**
+ * {@link ServletConfig} for {@link PageContextServlet}.
+ */
+ private class PageContextServletConfig implements ServletConfig {
+
+ private ServletContext servletContext;
+ private String servletName;
+
+ public PageContextServletConfig(ServletContext servletContext, String servletName) {
+ this.servletContext = servletContext;
+ this.servletName = servletName;
+ }
+
+ @Override
+ public String getServletName() {
+ return servletName;
+ }
+
+ @Override
+ public ServletContext getServletContext() {
+ return servletContext;
+ }
+
+ @Override
+ public String getInitParameter(String name) {
+ return null;
+ }
+
+ @Override
+ public Enumeration<String> getInitParameterNames() {
+ return Collections.enumeration(Collections.<String> emptySet());
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8e8c724b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
index 0435004..4f21e58 100644
--- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
+++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/web/view/FreemarkerViewTest.java
@@ -93,12 +93,12 @@ public class FreemarkerViewTest {
request.setPathInfo(";mypathinfo");
request.addParameter("token1", "value1");
request.setSession(session);
- request.setAttribute("visitorCount", visitorCount);
+ request.setAttribute("promotion", "Fresh blue berries");
// TODO: Add 'Application.attributeName' example, too.
templateLoader.putTemplate("default-model.ftl",
- "${name!}, you have ${Session.itemCountInCart!0} items in cart. "
- + "BTW, you're ${Request.visitorCount}th visitor. "
+ "${name!}, you have ${Session.itemCountInCart!0} items in cart. " + "Hot deal: ${Request.promotion}. "
+ + "BTW, you're ${Application.visitorCount}th visitor. "
+ "(token1: ${RequestParameters['token1']!})");
FreemarkerView view = new FreemarkerView();
@@ -112,8 +112,8 @@ public class FreemarkerViewTest {
final long count = visitorCount.incrementAndGet();
MockHttpServletResponse response = new MockHttpServletResponse();
view.render(model, request, response);
- assertEquals("Dan, you have 3 items in cart. BTW, you're " + count + "th visitor. (token1: value1)",
- response.getContentAsString());
+ assertEquals("Dan, you have 3 items in cart. Hot deal: Fresh blue berries. BTW, you're " + count
+ + "th visitor. (token1: value1)", response.getContentAsString());
}
@Test