You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@click.apache.org by sa...@apache.org on 2009/03/24 21:58:34 UTC
svn commit: r758016 - in /incubator/click/trunk/click:
documentation/docs/roadmap-changes.html
framework/src/org/apache/click/ClickServlet.java
framework/src/org/apache/click/util/ClickUtils.java
Author: sabob
Date: Tue Mar 24 20:58:33 2009
New Revision: 758016
URL: http://svn.apache.org/viewvc?rev=758016&view=rev
Log:
added convenience method ClickUtils.createTemplateModel, to allow easy creationg of Velocity templating models
Modified:
incubator/click/trunk/click/documentation/docs/roadmap-changes.html
incubator/click/trunk/click/framework/src/org/apache/click/ClickServlet.java
incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java
Modified: incubator/click/trunk/click/documentation/docs/roadmap-changes.html
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/documentation/docs/roadmap-changes.html?rev=758016&r1=758015&r2=758016&view=diff
==============================================================================
--- incubator/click/trunk/click/documentation/docs/roadmap-changes.html (original)
+++ incubator/click/trunk/click/documentation/docs/roadmap-changes.html Tue Mar 24 20:58:33 2009
@@ -85,6 +85,22 @@
</div>
<ul style="padding: 0em; margin-left:0em;margin-bottom: 2em">
<li>
+ <a target="_blank" class="external" href="http://www.avoka.com/click-examples/general/page-head-demo.htm">
+ Page HEAD elements example</a> demonstrates how to add
+ <a href="click-api/org/apache/click/control/element/JsImport.html">JsImport</a>,
+ <a href="click-api/org/apache/click/control/element/JsScript.html">JsScript</a>,
+ <a href="click-api/org/apache/click/control/element/CssImport.html">CssImport</a>
+ and <a href="click-api/org/apache/click/control/element/CssStyle.html">CssStyle</a>
+ HEAD elements to a Page.
+ </li>
+ <li>
+ <a target="_blank" class="external" href="http://www.avoka.com/click-examples/general/control-head-demo.htm">
+ Control HEAD elements example</a> demonstrates how to add
+ <a href="click-api/org/apache/click/control/element/JsImport.html">JsImport</a> and
+ <a href="click-api/org/apache/click/control/element/CssImport.html">CssImport</a>
+ HEAD elements to a custom Control.
+ </li>
+ <li>
<a target="_blank" class="external" href="http://www.avoka.com/click-examples/table/large-dataset-demo.htm">
Large Dataset Demo</a> demonstrates a Table with a large number of rows
and how to lazily page through the rows using a custom Table model.
@@ -97,10 +113,48 @@
</ul>
<div style="margin-left: -2em; margin-top: 1.5em; margin-bottom: 1em;">
+ New documentation:
+ </div>
+ <ul style="padding: 0em; margin-left:0em;margin-bottom: 2em">
+ <li>
+ Added documentation describing the new HEAD element support.
+ Please see the new section on Page HEAD elements
+ <a target="blank" class="external" href="user-guide/html/ch02s12.html">here</a>
+ the section on Control HEAD elements <a target="blank" class="external" href="user-guide/html/ch03s05.html">here</a>.
+ </li>
+ </ul>
+
+ <div style="margin-left: -2em; margin-top: 1.5em; margin-bottom: 1em;">
New features and issues resolved:
</div>
<ul style="padding: 0em; margin-left:0em;margin-bottom: 2em">
<li class="change">
+ Added first class support for HEAD elements such as JavaScript and Css.
+ The following classes were added:
+ <a href="click-api/org/apache/click/control/element/Element.html">Element</a>,
+ <a href="click-api/org/apache/click/control/element/ResourceElement.html">ResourceElement</a>,
+ <a href="click-api/org/apache/click/control/element/JsImport.html">JsImport</a>,
+ <a href="click-api/org/apache/click/control/element/JsScript.html">JsScript</a>,
+ <a href="click-api/org/apache/click/control/element/CssImport.html">CssImport</a>
+ and <a href="click-api/org/apache/click/control/element/CssStyle.html">CssStyle</a>.
+ A new method was added to Page and Control: <a href="click-api/org/apache/click/Control.html#getHeadElements()">Control.getHeadElements()</a>
+ and <a href="click-api/org/apache/click/Page.html#getHeadElements()">Page.getHeadElements()</a>.
+ [<a target='_blank' href="https://issues.apache.org/jira/browse/CLK-501">501</a>].
+ </li>
+ <li class="change">
+ Deprecated methods: <a href="click-api/org/apache/click/Control.html#getHtmlImports()">Control.getHtmlImports()</a> and
+ <a href="click-api/org/apache/click/Page.html#getHtmlImports()">Page.getHtmlImports()</a>.
+ These methods have been deprecated in favor of
+ <a href="click-api/org/apache/click/Control.html#getHeadElements()">Control.getHeadElements()</a>
+ and <a href="click-api/org/apache/click/Page.html#getHeadElements()">Page.getHeadElements()</a>.
+ </li>
+ <li class="change">
+ Added method,
+ <a href="click-api/org/apache/click/util/ClickUtils.html#createTemplateModel(org.apache.click.Page, org.apache.click.Context)">ClickUtils.createTemplateModel</a>,
+ which returns a template model containing objects such as the Context
+ path, Page path, HTTP request, HTTP response, HTTP session etc.
+ </li>
+ <li class="change">
Improved Table to support very large datasets by promoting the methods
<a href="click-api/org/apache/click/control/Table.html#getFirstRow()">getFirstRow()</a>
and <a href="click-api/org/apache/click/control/Table.html#getLastRow()">getLastRow()</a>
Modified: incubator/click/trunk/click/framework/src/org/apache/click/ClickServlet.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/ClickServlet.java?rev=758016&r1=758015&r2=758016&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/ClickServlet.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/ClickServlet.java Tue Mar 24 20:58:33 2009
@@ -1011,84 +1011,8 @@
});
}
- final Map model = new HashMap(page.getModel());
-
- final HttpServletRequest request = page.getContext().getRequest();
-
- Object pop = model.put("request", request);
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on " + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"request\". The page model object "
- + pop + " has been replaced with the request object";
- logger.warn(msg);
- }
-
- pop = model.put("response", page.getContext().getResponse());
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on " + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"response\". The page model object "
- + pop + " has been replaced with the response object";
- logger.warn(msg);
- }
-
- SessionMap sessionMap = new SessionMap(request.getSession(false));
- pop = model.put("session", sessionMap);
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on " + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"session\". The page model object "
- + pop + " has been replaced with the request "
- + " session";
- logger.warn(msg);
- }
-
- pop = model.put("context", request.getContextPath());
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on " + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"context\". The page model object "
- + pop + " has been replaced with the request "
- + " context path";
- logger.warn(msg);
- }
-
- Format format = page.getFormat();
- if (format != null) {
- pop = model.put("format", format);
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on "
- + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"format\". The page model object " + pop
- + " has been replaced with the format object";
- logger.warn(msg);
- }
- }
-
- String path = page.getPath();
- if (path != null) {
- pop = model.put("path", path);
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on "
- + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"path\". The page model object " + pop
- + " has been replaced with the page path";
- logger.warn(msg);
- }
- }
-
- pop = model.put("messages", page.getMessages());
- if (pop != null && !page.isStateful()) {
- String msg = page.getClass().getName() + " on " + page.getPath()
- + " model contains an object keyed with reserved "
- + "name \"messages\". The page model object "
- + pop + " has been replaced with the request "
- + " messages";
- logger.warn(msg);
- }
+ final Context context = page.getContext();
+ final Map model = ClickUtils.createTemplateModel(page, context);
PageImports pageImports = page.getPageImports();
pageImports.popuplateTemplateModel(model);
Modified: incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java
URL: http://svn.apache.org/viewvc/incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java?rev=758016&r1=758015&r2=758016&view=diff
==============================================================================
--- incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java (original)
+++ incubator/click/trunk/click/framework/src/org/apache/click/util/ClickUtils.java Tue Mar 24 20:58:33 2009
@@ -41,6 +41,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -642,6 +643,129 @@
}
/**
+ * Creates a template model of key/value pairs which can be used by template
+ * engines such as Velocity and Freemarker.
+ * <p/>
+ * The following objects will be added to the model:
+ * <ul>
+ * <li>the Page {@link org.apache.click.Page#model model} Map key/value
+ * pairs
+ * </li>
+ * <li>context - the Servlet context path, e.g. <span class="">/mycorp</span>
+ * </li>
+ * <li>format - the Page {@link Format} object for formatting the display
+ * of objects.
+ * </li>
+ * <li>messages - the {@link MessagesMap} adaptor for the
+ * {@link org.apache.click.Page#getMessages()} method.
+ * </li>
+ * <li>path - the {@link org.apache.click.Page#path path} of the <tt>page</tt>
+ * template.
+ * </li>
+ * <li>request - the page {@link javax.servlet.http.HttpServletRequest}
+ * object.
+ * </li>
+ * <li>response - the page {@link javax.servlet.http.HttpServletResponse}
+ * object.
+ * </li>
+ * <li>session - the {@link SessionMap} adaptor for the users
+ * {@link javax.servlet.http.HttpSession}.
+ * </li>
+ * </ul>
+ *
+ * @param page the page to populate the template model from
+ * @param context the request context
+ * @return a template model as a map
+ */
+ //public static Map createTemplateModel(final Page page, Context context) {
+ public static Map createTemplateModel(final Page page, Context context) {
+
+ ConfigService configService = ClickUtils.getConfigService(context.getServletContext());
+ LogService logger = configService.getLogService();
+
+ final Map model = new HashMap(page.getModel());
+
+ final HttpServletRequest request = context.getRequest();
+
+ Object pop = model.put("request", request);
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on " + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"request\". The page model object "
+ + pop + " has been replaced with the request object";
+ logger.warn(msg);
+ }
+
+ pop = model.put("response", context.getResponse());
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on " + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"response\". The page model object "
+ + pop + " has been replaced with the response object";
+ logger.warn(msg);
+ }
+
+ SessionMap sessionMap = new SessionMap(request.getSession(false));
+ pop = model.put("session", sessionMap);
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on " + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"session\". The page model object "
+ + pop + " has been replaced with the request "
+ + " session";
+ logger.warn(msg);
+ }
+
+ pop = model.put("context", request.getContextPath());
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on " + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"context\". The page model object "
+ + pop + " has been replaced with the request "
+ + " context path";
+ logger.warn(msg);
+ }
+
+ Format format = page.getFormat();
+ if (format != null) {
+ pop = model.put("format", format);
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on "
+ + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"format\". The page model object " + pop
+ + " has been replaced with the format object";
+ logger.warn(msg);
+ }
+ }
+
+ String path = page.getPath();
+ if (path != null) {
+ pop = model.put("path", path);
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on "
+ + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"path\". The page model object " + pop
+ + " has been replaced with the page path";
+ logger.warn(msg);
+ }
+ }
+
+ pop = model.put("messages", page.getMessages());
+ if (pop != null && !page.isStateful()) {
+ String msg = page.getClass().getName() + " on " + page.getPath()
+ + " model contains an object keyed with reserved "
+ + "name \"messages\". The page model object "
+ + pop + " has been replaced with the request "
+ + " messages";
+ logger.warn(msg);
+ }
+
+ return model;
+ }
+
+ /**
* Invalidate the specified cookie and delete it from the response object.
* <p/>
* This method was derived from Atlassian <tt>CookieUtils</tt> method of