JBoss Rich Faces SVN: r9109 - in trunk/framework/test/src/test/java/org/richfaces: util and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-19 09:10:32 -0400 (Thu, 19 Jun 2008)
New Revision: 9109
Added:
trunk/framework/test/src/test/java/org/richfaces/util/
trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java
Log:
RF-2815
Added: trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java
===================================================================
--- trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java (rev 0)
+++ trunk/framework/test/src/test/java/org/richfaces/util/ComponentPhaseEventHandlerUtilsTest.java 2008-06-19 13:10:32 UTC (rev 9109)
@@ -0,0 +1,24 @@
+/**
+ *
+ */
+package org.richfaces.util;
+
+import org.apache.shale.test.base.AbstractJsfTestCase;
+import org.richfaces.event.ComponentPhaseEventHandler;
+
+public class ComponentPhaseEventHandlerUtilsTest extends AbstractJsfTestCase {
+
+ public ComponentPhaseEventHandlerUtilsTest(String name) {
+ super(name);
+ }
+
+ /**
+ * Test method for {@link org.richfaces.util.ComponentPhaseEventHandlerUtils#getHandlers()}.
+ */
+ public void testGetHandlers() {
+ ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
+ assertNotNull(handlers);
+ assertTrue(handlers.length > 0);
+ }
+
+}
16 years
JBoss Rich Faces SVN: r9108 - trunk/docs/userguide/en/src/main/docbook/included.
by richfaces-svn-commits@lists.jboss.org
Author: atsebro
Date: 2008-06-19 08:27:30 -0400 (Thu, 19 Jun 2008)
New Revision: 9108
Modified:
trunk/docs/userguide/en/src/main/docbook/included/inplaceSelect.xml
Log:
RF-3695--hide selectOnEdit attribute for InplaceSelect
Modified: trunk/docs/userguide/en/src/main/docbook/included/inplaceSelect.xml
===================================================================
--- trunk/docs/userguide/en/src/main/docbook/included/inplaceSelect.xml 2008-06-19 12:26:43 UTC (rev 9107)
+++ trunk/docs/userguide/en/src/main/docbook/included/inplaceSelect.xml 2008-06-19 12:27:30 UTC (rev 9108)
@@ -236,12 +236,16 @@
<para>
- Another useful attribute boolean is <emphasis><property>"openOnEdit"</property></emphasis>, when set to "true" it opens
- drop-down list with items after <property>edit</property> state is activated.
- </para>
+ To prevent opening the drop-down list by default, once <property>edit</property> state is activated,
+ set the <emphasis><property>"openOnEdit"</property></emphasis> attribute to "false".
+ The default value is “true”.
+ </para>
+ <para>
+ <emphasis role="bold">Example:</emphasis>
+ </para>
<programlisting role="XML"><![CDATA[...
-<rich:inplaceSelect value="#{bean.inputValue}" showControls="true" openOnEdit="true">
+<rich:inplaceSelect value="#{bean.inputValue}" showControls="true" openOnEdit="false">
<f:selectItems value="#{bean.selectItems}"/>
</rich:inplaceSelect>
...]]></programlisting>
@@ -251,7 +255,7 @@
This is the result:
</para>
<figure>
- <title>The <emphasis><property>"selectOnEdit"</property></emphasis> attribute usage</title>
+ <title>The <emphasis><property>"openOnEdit"</property></emphasis> attribute usage</title>
<mediaobject>
<imageobject>
<imagedata fileref="images/inplaceSelect5.png"/>
16 years
JBoss Rich Faces SVN: r9106 - in trunk/framework/impl/src/main: resources/META-INF/services and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-19 08:22:10 -0400 (Thu, 19 Jun 2008)
New Revision: 9106
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
Log:
RF-2815
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-18 22:50:42 UTC (rev 9105)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-19 12:22:10 UTC (rev 9106)
@@ -14,7 +14,6 @@
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.component.UIComponent;
-import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
@@ -68,11 +67,13 @@
LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
+
+ boolean ajaxRequest = AjaxContext.getCurrentInstance().isAjaxRequest(context);
+
if (log.isDebugEnabled()) {
log
.debug("Process component tree for collect used scripts and styles");
}
- UIViewRoot root = context.getViewRoot();
try {
Skin skin = SkinFactory.getInstance().getSkin(context);
// For a "NULL" skin, do not collect components stylesheets
@@ -96,8 +97,7 @@
.equals(scriptStrategy)) {
processScripts = false;
// For an "ALL" strategy, it is not necessary to load scripts in the ajax request
- //TODO add !this.isAjaxRequest(context)
- if (false) {
+ if (!ajaxRequest) {
try {
scripts.add(internetResourceBuilder
.createResource(
@@ -148,8 +148,7 @@
processStyles = false;
// For an "ALL" strategy, it is not necessary to load styles
// in the ajax request
- //TODO add !this.isAjaxRequest(context)
- if (false) {
+ if (!ajaxRequest) {
String commonStyle = InternetResourceBuilder.COMMON_STYLE_PREFIX;
if (useStdControlsSkinning
Modified: trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler
===================================================================
--- trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-18 22:50:42 UTC (rev 9105)
+++ trunk/framework/impl/src/main/resources/META-INF/services/org.richfaces.component.ComponentPhaseEventHandler 2008-06-19 12:22:10 UTC (rev 9106)
@@ -1 +1,2 @@
-org.ajax4jsf.component.UIDataAdaptorPhaseEventHandler
\ No newline at end of file
+org.ajax4jsf.component.UIDataAdaptorPhaseEventHandler
+org.ajax4jsf.context.ViewResourcesPhaseEventHandler
\ No newline at end of file
16 years
JBoss Rich Faces SVN: r9105 - trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-06-18 18:50:42 -0400 (Wed, 18 Jun 2008)
New Revision: 9105
Modified:
trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx
Log:
JavaScript escapement for hotKey implemented
Modified: trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx
===================================================================
--- trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx 2008-06-18 22:46:49 UTC (rev 9104)
+++ trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx 2008-06-18 22:50:42 UTC (rev 9105)
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
+
<f:root
xmlns:f="http://ajax4jsf.org/cdk/template"
xmlns:c=" http://java.sun.com/jsf/core"
@@ -68,17 +69,25 @@
<![CDATA[
selector = (String) attributes.get("selector");
if (selector != null && selector.length() != 0) {
- selector = HtmlUtil.expandIdSelector(selector, component, context);
+ selector = getUtils().escapeJavaScript(
+ HtmlUtil.expandIdSelector(selector, component, context));
}
]]>
</jsp:scriptlet>
+ <c:object var="key" type="java.lang.Object" value="#{attributes['key']}"/>
+ <jsp:scriptlet>
+ <![CDATA[
+ key = getUtils().escapeJavaScript(key);
+ ]]>
+ </jsp:scriptlet>
+
<span id="#{clientId}" style="display:none"
x:passThruWithExclusions="id"
>
<script>
- new Richfaces.hotKey("#{clientId}","#{attributes['key']}","#{selector}", #{options}, function(event) { #{attributes['handler']} });
+ new Richfaces.hotKey("#{clientId}","#{key}","#{selector}", #{options}, function(event) { #{attributes['handler']} });
</script>
</span>
</f:root>
\ No newline at end of file
16 years
JBoss Rich Faces SVN: r9104 - trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-06-18 18:46:49 -0400 (Wed, 18 Jun 2008)
New Revision: 9104
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererUtils.java
Log:
JavaScript escapement method added
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererUtils.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererUtils.java 2008-06-18 22:20:15 UTC (rev 9103)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/renderkit/RendererUtils.java 2008-06-18 22:46:49 UTC (rev 9104)
@@ -41,6 +41,7 @@
import javax.faces.convert.Converter;
import org.ajax4jsf.Messages;
+import org.ajax4jsf.javascript.JSEncoder;
import org.ajax4jsf.javascript.JSFunctionDefinition;
import org.ajax4jsf.renderkit.compiler.TemplateContext;
import org.ajax4jsf.resource.InternetResource;
@@ -945,4 +946,21 @@
return null;
}
+
+ public String escapeJavaScript(Object o) {
+ if (o != null) {
+ JSEncoder encoder = new JSEncoder();
+ StringBuilder result = new StringBuilder();
+ String string = o.toString();
+ int length = string.length();
+
+ for (int i = 0; i < length; i++) {
+ result.append(encoder.encode(string.charAt(i)));
+ }
+
+ return result.toString();
+ } else {
+ return null;
+ }
+ }
}
16 years
JBoss Rich Faces SVN: r9103 - in trunk/sandbox/ui/hotKey/src/main: java/org/richfaces/component and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-06-18 18:20:15 -0400 (Wed, 18 Jun 2008)
New Revision: 9103
Modified:
trunk/sandbox/ui/hotKey/src/main/config/component/hotKey.xml
trunk/sandbox/ui/hotKey/src/main/java/org/richfaces/component/UIHotKey.java
trunk/sandbox/ui/hotKey/src/main/resources/org/richfaces/renderkit/html/scripts/hotKey.js
trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx
Log:
Updated hotKey version committed
Modified: trunk/sandbox/ui/hotKey/src/main/config/component/hotKey.xml
===================================================================
--- trunk/sandbox/ui/hotKey/src/main/config/component/hotKey.xml 2008-06-18 22:20:05 UTC (rev 9102)
+++ trunk/sandbox/ui/hotKey/src/main/config/component/hotKey.xml 2008-06-18 22:20:15 UTC (rev 9103)
@@ -43,7 +43,7 @@
<defaultvalue>"immediate"</defaultvalue>
</property>
<property>
- <name>target</name>
+ <name>selector</name>
<classname>java.lang.String</classname>
<description>
</description>
@@ -57,12 +57,6 @@
<defaultvalue>""</defaultvalue>
</property>
<property>
- <name>propagate</name>
- <classname>java.lang.Boolean</classname>
- <description>
- </description>
- </property>
- <property>
<name>disableInInput</name>
<classname>java.lang.Boolean</classname>
<description>
Modified: trunk/sandbox/ui/hotKey/src/main/java/org/richfaces/component/UIHotKey.java
===================================================================
--- trunk/sandbox/ui/hotKey/src/main/java/org/richfaces/component/UIHotKey.java 2008-06-18 22:20:05 UTC (rev 9102)
+++ trunk/sandbox/ui/hotKey/src/main/java/org/richfaces/component/UIHotKey.java 2008-06-18 22:20:15 UTC (rev 9103)
@@ -1,5 +1,22 @@
/**
+ * License Agreement.
*
+ * JBoss RichFaces - Ajax4jsf Component Library
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.richfaces.component;
Modified: trunk/sandbox/ui/hotKey/src/main/resources/org/richfaces/renderkit/html/scripts/hotKey.js
===================================================================
--- trunk/sandbox/ui/hotKey/src/main/resources/org/richfaces/renderkit/html/scripts/hotKey.js 2008-06-18 22:20:05 UTC (rev 9102)
+++ trunk/sandbox/ui/hotKey/src/main/resources/org/richfaces/renderkit/html/scripts/hotKey.js 2008-06-18 22:20:15 UTC (rev 9103)
@@ -1,15 +1,25 @@
if (!window.Richfaces) window.Richfaces = {};
-Richfaces.hotKey = function() {
+Richfaces.hotKey = function() {
this.initialize.apply(this, arguments);
};
+Richfaces.hotKey.resolveHandler = function(handlerBody) {
+ if (handlerBody) {
+ if (typeof handlerBody == "function") {
+ return handlerBody;
+ } else {
+ return new Function("event", handlerBody);
+ }
+ }
+};
+
jQuery.extend(Richfaces.hotKey.prototype, {
- initialize: function(id, key, targetId, options, handler) {
+ initialize: function(id, key, selector, options, handler) {
this.id = id;
- this.targetId = targetId;
+ this.selector = selector;
this.key = key;
- this.options = options;
+ this.baseOptions = options;
this.handler = handler;
this["rich:destructor"] = "destroy";
@@ -17,38 +27,119 @@
this.element.component = this;
if ("immediate" == options.timing) {
- this.add();
+ this.enable();
} else if ("onload" == options.timing) {
var _this = this;
jQuery(document).ready(function() {
- _this.add();
+ _this.enable();
});
}
},
destroy: function() {
- this.remove();
+ this.disable();
this.element.component = null;
this.element = null;
},
- _hasTarget: function() {
- return !this.targetId || this.options.target;
+ buildOptions: function(selector, argOptions) {
+ var result = new Array();
+
+ var elts;
+
+ if (typeof selector == "string") {
+ elts = jQuery(selector);
+ } else if (selector.constructor == Array) {
+ elts = new Array();
+
+ for (var i = 0; i < selector.length; i++) {
+ var s = selector[i];
+
+ if (!s.nodeType) {
+ var q = jQuery(s);
+ for (var j = 0; j < q.length; j++) {
+ elts.push(q[j]);
+ }
+ } else {
+ elts.push(s);
+ }
+ }
+ } else {
+ elts = [selector];
+ }
+
+ for (var i = 0; i < elts.length; i++) {
+
+ var options = jQuery.extend({}, this.baseOptions, argOptions);
+ options.target = elts[i];
+
+ result.push(options);
+ }
+
+ return result;
},
- add: function () {
- if (this.targetId) {
- this.options.target = jQuery(this.targetId)[0];
- }
+ _getComponentControlParameters: function(args) {
+ return args.length <= 1 ? args[0] : args[1];
+ },
+
+ _generalAdd: function(key, options, handler) {
+ var _handler = function() {
+ if (handler.apply(this, arguments) === false) {
+ var event = arguments[0];
+
+ event.stopPropagation();
+ event.preventDefault();
+ }
+ };
- if (this._hasTarget()) {
- jQuery.hotkeys.add(this.key, this.options, this.handler);
+ for (var i = 0; i < options.length; i++) {
+ jQuery.hotkeys.add(key, options[i], _handler);
}
},
+
+ _generalRemove: function(key, options) {
+ for (var i = 0; i < options.length; i++) {
+ jQuery.hotkeys.remove(key, options[i]);
+ }
+ },
- remove: function () {
- if (this._hasTarget()) {
- jQuery.hotkeys.remove(this.key, this.options);
+ enable: function () {
+ if (!this.options) {
+ this.options = this.buildOptions(this.selector);
}
+
+ this._generalAdd(this.key, this.options, this.handler);
+ },
+
+ add: function() {
+ var parameters = this._getComponentControlParameters(arguments);
+
+ var selector = parameters.selector || this.selector;
+ var key = parameters.key || this.key;
+ var handler = parameters.handler || this.handler;
+
+ var options = this.buildOptions(selector, parameters);
+
+ this._generalAdd(key, options, this.constructor.resolveHandler(handler));
+ },
+
+ disable: function () {
+ if (!this.options) {
+ this.options = this.buildOptions(this.selector);
+ }
+
+ this._generalRemove(this.key, this.options);
+ },
+
+ remove: function() {
+ var parameters = this._getComponentControlParameters(arguments);
+
+ var selector = parameters.selector || this.selector;
+ var key = parameters.key || this.key;
+
+ var options = this.buildOptions(selector, parameters);
+
+ this._generalRemove(key, options);
}
-})
\ No newline at end of file
+});
\ No newline at end of file
Modified: trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx
===================================================================
--- trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx 2008-06-18 22:20:05 UTC (rev 9102)
+++ trunk/sandbox/ui/hotKey/src/main/templates/org/richfaces/htmlHotKey.jspx 2008-06-18 22:20:15 UTC (rev 9103)
@@ -22,8 +22,16 @@
options = new StringBuilder("{");
String timing = (String) attributes.get("timing");
+
+ if (!"onload".equals(timing) && !"immediate".equals(timing) &&
+ !"onregistercall".equals(timing)) {
+
+ throw new IllegalArgumentException("The timing attribute of the hotKey component (id='"+clientId+"') has an invalid value:'"+ timing +
+ "'. It may have only the following values: 'immediate', 'onload', 'onregistercall'");
+ }
+
options.append("timing:'");
- options.append(timing);
+ options.append(timing.toString());
options.append("'");
String type = (String) attributes.get("type");
@@ -55,12 +63,12 @@
]]>
</jsp:scriptlet>
- <c:object var="targetId" type="java.lang.String" value=""/>
+ <c:object var="selector" type="java.lang.String" value=""/>
<jsp:scriptlet>
<![CDATA[
- targetId = (String) attributes.get("target");
- if (targetId != null && targetId.length() != 0) {
- targetId = HtmlUtil.expandIdSelector(targetId, component, context);
+ selector = (String) attributes.get("selector");
+ if (selector != null && selector.length() != 0) {
+ selector = HtmlUtil.expandIdSelector(selector, component, context);
}
]]>
</jsp:scriptlet>
@@ -70,7 +78,7 @@
>
<script>
- new Richfaces.hotKey("#{clientId}","#{attributes['key']}","#{targetId}", #{options}, function() { #{attributes['handler']} });
+ new Richfaces.hotKey("#{clientId}","#{attributes['key']}","#{selector}", #{options}, function(event) { #{attributes['handler']} });
</script>
</span>
</f:root>
\ No newline at end of file
16 years
JBoss Rich Faces SVN: r9102 - in trunk/sandbox/samples/hotKey-sample: src/main/webapp/pages and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: nbelaevski
Date: 2008-06-18 18:20:05 -0400 (Wed, 18 Jun 2008)
New Revision: 9102
Modified:
trunk/sandbox/samples/hotKey-sample/pom.xml
trunk/sandbox/samples/hotKey-sample/src/main/webapp/pages/index.jsp
Log:
Updated hotKey version committed
Modified: trunk/sandbox/samples/hotKey-sample/pom.xml
===================================================================
--- trunk/sandbox/samples/hotKey-sample/pom.xml 2008-06-18 17:57:51 UTC (rev 9101)
+++ trunk/sandbox/samples/hotKey-sample/pom.xml 2008-06-18 22:20:05 UTC (rev 9102)
@@ -43,5 +43,10 @@
<artifactId>functions</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>componentControl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Modified: trunk/sandbox/samples/hotKey-sample/src/main/webapp/pages/index.jsp
===================================================================
--- trunk/sandbox/samples/hotKey-sample/src/main/webapp/pages/index.jsp 2008-06-18 17:57:51 UTC (rev 9101)
+++ trunk/sandbox/samples/hotKey-sample/src/main/webapp/pages/index.jsp 2008-06-18 22:20:05 UTC (rev 9102)
@@ -4,29 +4,83 @@
<%@ taglib uri="http://labs.jboss.com/jbossrichfaces/ui/ui/hotKey" prefix="sb"%>
<%@ taglib uri="http://labs.jboss.com/jbossrichfaces/ui/functions" prefix="rich" %>
+<%@ taglib uri="http://labs.jboss.com/jbossrichfaces/ui/componentControl" prefix="cc" %>
<html>
<head>
<title></title>
</head>
<body>
<f:view>
- <h:form>
+ <h:form id="_form">
<h:panelGroup id="panel">
<h:panelGroup rendered="#{bean.rendered}">
Alt+A and Alt+L are turned on when page is loaded<br/>
- Set focus to 'target' button and press Alt+T<br />
+ Set focus to one of 'target' buttons and press Alt+T<br />
<sb:hotKey id="me" key="alt+a" timing="immediate" handler="alert('alt+A is pressed')" />
<sb:hotKey id="you" key="alt+l" timing="onload" handler="alert('alt+L is pressed')" />
- <sb:hotKey id="targetted" key="alt+t" timing="onload" handler="alert('alt+T is pressed')" checkParent="false"
- target="#targetButton" />
-
- <h:commandButton onclick="return false;" id="targetButton" value="Target" /><br />
+ <sb:hotKey id="targetted" key="alt+t" timing="onload" handler="alert('alt+T is pressed; event type: ' + event.type); return false;" checkParent="false"
+ selector="#targetButton0, #targetButton1" />
- <button onclick="${rich:component('me')}.add()">Turn Alt-A On</button>
- <button onclick="${rich:component('me')}.remove()">Turn Alt-A Off</button><br />
- <button onclick="${rich:component('you')}.add()">Turn Alt-L On</button>
- <button onclick="${rich:component('you')}.remove()">Turn Alt-L Off</button><br />
+ <sb:hotKey id="js" timing="onregistercall"/>
+
+ <h:commandButton onclick="return false;" id="targetButton0" value="Target 0" /><br />
+ <h:commandButton onclick="return false;" id="targetButton1" value="Target 1" /><br />
+
+ <button onclick="${rich:component('me')}.enable(); return false;">Turn Alt-A On</button>
+ <button onclick="${rich:component('me')}.disable(); return false;">Turn Alt-A Off</button><br />
+ <button onclick="${rich:component('you')}.enable(); return false;">Turn Alt-L On</button>
+ <button onclick="${rich:component('you')}.disable(); return false;">Turn Alt-L Off</button><br />
+
+ <br />
+
+ Add handler using JS API, set focus to JS API Button, then press ctrl+c
+
+ <br />
+
+ <button id="js_add" onclick="return false;">Add with JS API</button>
+ <button id="js_remove" onclick="return false;">Remove with JS API</button>
+
+ <br />
+
+ <cc:componentControl attachTo="js_add" for="js" event="onclick"
+ operation="add">
+
+ <f:param name="selector" value="#_form\:jsButton" />
+ <f:param name="key" value="ctrl+c" />
+ <f:param name="handler" value="alert('ctrl + c pressed')" />
+ </cc:componentControl>
+
+ <cc:componentControl attachTo="js_remove" for="js" event="onclick"
+ operation="remove">
+
+ <f:param name="selector" value="#_form\:jsButton" />
+ <f:param name="key" value="ctrl+c" />
+ </cc:componentControl>
+
+ <h:commandButton onclick="return false;" id="jsButton" value="JS API Button" /><br />
+
+ <br />
+
+ Add global handler with JS API, then press ctrl+g
+
+ <br />
+
+ <button id="js_global_add" onclick="return false;">Add with JS API globally</button>
+ <button id="js_global_remove" onclick="return false;">Remove with JS API globally</button>
+
+ <cc:componentControl attachTo="js_global_add" for="js" event="onclick"
+ operation="add">
+
+ <f:param name="key" value="ctrl+g" />
+ <f:param name="handler" value="alert('ctrl + g pressed')" />
+ </cc:componentControl>
+
+ <cc:componentControl attachTo="js_global_remove" for="js" event="onclick"
+ operation="remove">
+
+ <f:param name="key" value="ctrl+g" />
+ </cc:componentControl>
</h:panelGroup>
</h:panelGroup>
16 years
JBoss Rich Faces SVN: r9101 - trunk/framework/impl/src/main/java/org/ajax4jsf/context.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-18 13:57:51 -0400 (Wed, 18 Jun 2008)
New Revision: 9101
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
Log:
RF-2815
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-18 17:21:59 UTC (rev 9100)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-18 17:57:51 UTC (rev 9101)
@@ -3,12 +3,18 @@
*/
package org.ajax4jsf.context;
+import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
+import javax.el.ExpressionFactory;
+import javax.el.ValueExpression;
import javax.faces.FactoryFinder;
+import javax.faces.application.Application;
import javax.faces.component.UIComponent;
+import javax.faces.component.UIViewRoot;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
@@ -16,9 +22,12 @@
import javax.faces.render.RenderKitFactory;
import javax.faces.render.Renderer;
+import org.ajax4jsf.application.AjaxViewHandler;
import org.ajax4jsf.renderkit.HeaderResourceProducer;
import org.ajax4jsf.renderkit.UserResourceRenderer;
import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.resource.ResourceNotFoundException;
+import org.ajax4jsf.util.ELUtils;
import org.ajax4jsf.webapp.BaseFilter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -34,48 +43,183 @@
//TODO remove this in other
public static final String RESOURCES_PROCESSED = "org.ajax4jsf.framework.HEADER_PROCESSED";
-
+ private static final String INIT_PARAMETER_PREFIX = "_init_parameter_";
+ private static final Object NULL = new Object();
+ private static final Pattern USER_AGENTS = Pattern.compile(" AppleWebKit/|^Opera/| Opera ");
+ //todo
+
/* (non-Javadoc)
* @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
*/
public Object beforePhaseBegin(PhaseEvent event) {
Object result = false;
FacesContext context = event.getFacesContext();
+
ExternalContext externalContext = context.getExternalContext();
Map<String,Object> requestMap = externalContext.getRequestMap();
if (!Boolean.TRUE.equals(requestMap.get(RESOURCES_PROCESSED))) {
if (null != requestMap.get(BaseFilter.RESPONSE_WRAPPER_ATTRIBUTE)) {
- RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
- .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
- RenderKit renderKit = rkFactory.getRenderKit(context, context
- .getViewRoot().getRenderKitId());
-
+
Boolean processStyles = true;
Boolean processScripts = true;
-
+
+ LinkedHashSet<String> scripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> styles = new LinkedHashSet<String>();
+ LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
+
+ if (log.isDebugEnabled()) {
+ log
+ .debug("Process component tree for collect used scripts and styles");
+ }
+ UIViewRoot root = context.getViewRoot();
try {
Skin skin = SkinFactory.getInstance().getSkin(context);
// For a "NULL" skin, do not collect components stylesheets
- processStyles = !"false".equals(skin.getParameter(context,
- Skin.loadStyleSheets));
+ if ("false".equals(skin.getParameter(context,
+ Skin.loadStyleSheets))) {
+ processStyles = false;
+ }
} catch (SkinNotFoundException e) {
log.warn("Current Skin is not found", e);
}
+ InternetResourceBuilder internetResourceBuilder = InternetResourceBuilder
+ .getInstance();
// Check init parameters for a resources processing.
String scriptStrategy = externalContext
.getInitParameter(InternetResourceBuilder.LOAD_SCRIPT_STRATEGY_PARAM);
- processScripts = !(InternetResourceBuilder.LOAD_NONE .equals(scriptStrategy)
- || InternetResourceBuilder.LOAD_ALL .equals(scriptStrategy));
-
+ if (null != scriptStrategy) {
+ if (InternetResourceBuilder.LOAD_NONE
+ .equals(scriptStrategy)) {
+ processScripts = false;
+ } else if (InternetResourceBuilder.LOAD_ALL
+ .equals(scriptStrategy)) {
+ processScripts = false;
+ // For an "ALL" strategy, it is not necessary to load scripts in the ajax request
+ //TODO add !this.isAjaxRequest(context)
+ if (false) {
+ try {
+ scripts.add(internetResourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_FRAMEWORK_SCRIPT)
+ .getUri(context, null));
+ scripts.add(internetResourceBuilder
+ .createResource(
+ this,
+ InternetResourceBuilder.COMMON_UI_SCRIPT)
+ .getUri(context, null));
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log
+ .warn("No aggregated javaScript library found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ }
+ }
+
+ boolean useStdControlsSkinning = false;
+
+ String stdControlsSkinning = getInitParameterValue(context, InternetResourceBuilder.STD_CONTROLS_SKINNING_PARAM);
+ if (stdControlsSkinning != null) {
+ useStdControlsSkinning = InternetResourceBuilder.ENABLE.equals(stdControlsSkinning);
+ }
+
+ boolean useStdControlsSkinningClasses = true;
+
+ String stdControlsSkinningClasses = getInitParameterValue(context, InternetResourceBuilder.STD_CONTROLS_SKINNING_CLASSES_PARAM);
+ if (stdControlsSkinningClasses != null) {
+ useStdControlsSkinningClasses = InternetResourceBuilder.ENABLE.equals(stdControlsSkinningClasses);
+ }
+
+ boolean useExtendedSkinning = isExtendedSkinningEnabled(externalContext);
+
String styleStrategy = externalContext
.getInitParameter(InternetResourceBuilder.LOAD_STYLE_STRATEGY_PARAM);
- processStyles = !(InternetResourceBuilder.LOAD_NONE.equals(styleStrategy)
- || InternetResourceBuilder.LOAD_ALL.equals(styleStrategy));
-
- LinkedHashSet<String> scripts = new LinkedHashSet<String>();
- LinkedHashSet<String> styles = new LinkedHashSet<String>();
- LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
- LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
+
+ if (InternetResourceBuilder.LOAD_NONE.equals(styleStrategy)) {
+ processStyles = false;
+ } else if (InternetResourceBuilder.LOAD_ALL
+ .equals(styleStrategy)) {
+ processStyles = false;
+ // For an "ALL" strategy, it is not necessary to load styles
+ // in the ajax request
+ //TODO add !this.isAjaxRequest(context)
+ if (false) {
+ String commonStyle = InternetResourceBuilder.COMMON_STYLE_PREFIX;
+
+ if (useStdControlsSkinning
+ || useStdControlsSkinningClasses) {
+ if (isExtendedSkinningEnabled(externalContext)) {
+ commonStyle += "-ext";
+ } else {
+ commonStyle += "-bas";
+ }
+
+ if (useStdControlsSkinning
+ && useStdControlsSkinningClasses) {
+ commonStyle += "-both";
+ } else if (useStdControlsSkinning) {
+ commonStyle += "-styles";
+ } else if (useStdControlsSkinningClasses) {
+ commonStyle += "-classes";
+ }
+ }
+
+ commonStyle += InternetResourceBuilder.COMMON_STYLE_EXTENSION;
+
+ try {
+ styles.add(internetResourceBuilder
+ .createResource(this, commonStyle).getUri(
+ context, null));
+
+ } catch (ResourceNotFoundException e) {
+ if (log.isWarnEnabled()) {
+ log.warn("No aggregated stylesheet found "
+ + e.getMessage());
+ }
+ }
+
+ }
+ } else {
+ if (useStdControlsSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_BASIC_STYLE)
+ .getUri(context, null));
+
+ if (useExtendedSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_STYLE)
+ .getUri(context, null));
+ }
+ }
+
+ if (useStdControlsSkinningClasses) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_BASIC_CLASSES_STYLE)
+ .getUri(context, null));
+
+ if (useExtendedSkinning) {
+ styles.add(
+ internetResourceBuilder.createResource(
+ this, InternetResourceBuilder.STD_CONTROLS_EXTENDED_CLASSES_STYLE)
+ .getUri(context, null));
+ }
+ }
+ }
+
+ RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
+ .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = rkFactory.getRenderKit(context, context
+ .getViewRoot().getRenderKitId());
+
result = new Object[] {renderKit, processStyles, processScripts, scripts, styles, userScripts, userStyles};
}
}
@@ -85,14 +229,87 @@
/* (non-Javadoc)
* @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent, java.lang.Object)
*/
+ @SuppressWarnings("unchecked")
public void beforePhaseEnd(PhaseEvent event, Object state) {
if (!Boolean.FALSE.equals(state)) {
+ FacesContext context = event.getFacesContext();
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String,Object> requestMap = externalContext.getRequestMap();
Object[] objects = (Object[]) state;
- Set<?> scripts = (Set<?>) objects[3];
- Set<?> styles = (Set<?>) objects[4];
- Set<?> userScripts = (Set<?>) objects[5];
- Set<?> userStyles = (Set<?>) objects[6];
- //TODO save these sets
+ Set<String> scripts = (Set<String>) objects[3];
+ Set<String> styles = (Set<String>) objects[4];
+ // TODO remove if possible
+ Set<String> userScripts = (Set<String>) objects[5];
+ Set<String> userStyles = (Set<String>) objects[6];
+ if (scripts.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "Scripts for insert into head : \n");
+ for (Iterator<String> iter = scripts.iterator(); iter.hasNext();) {
+ String script = iter.next();
+ buff.append(script).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.SCRIPTS_PARAMETER, scripts);
+ }
+
+ String skinStyleSheetUri = null;
+ String skinExtendedStyleSheetUri = null;
+ try {
+ Skin skin = SkinFactory.getInstance().getSkin(context);
+ // Set default style sheet for current skin.
+ skinStyleSheetUri = (String) skin.getParameter(context,
+ Skin.generalStyleSheet);
+ // Set default style sheet for current skin.
+ skinExtendedStyleSheetUri = (String) skin.getParameter(context,
+ Skin.extendedStyleSheet);
+ } catch (SkinNotFoundException e) {
+ log.warn("Current Skin is not found", e);
+ }
+
+ // Append Skin StyleSheet after a
+ if (null != skinStyleSheetUri) {
+ String resourceURL = context.getApplication()
+ .getViewHandler().getResourceURL(context,
+ skinStyleSheetUri);
+ styles.add(resourceURL);
+ }
+
+ if (null != skinExtendedStyleSheetUri && isExtendedSkinningEnabled(externalContext)) {
+ String resourceURL = context.getApplication().getViewHandler().getResourceURL(context,
+ skinExtendedStyleSheetUri);
+ styles.add(resourceURL);
+ }
+ if (styles.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "Styles for insert into head : \n");
+ for (Iterator<String> iter = styles.iterator(); iter.hasNext();) {
+ String style = (String) iter.next();
+ buff.append(style).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.STYLES_PARAMETER, styles);
+ }
+
+ if (userStyles.size() > 0) {
+ if (log.isDebugEnabled()) {
+ StringBuffer buff = new StringBuffer(
+ "User styles for insert into head : \n");
+ for (Iterator<String> iter = userStyles.iterator(); iter.hasNext();) {
+ String style = (String) iter.next();
+ buff.append(style).append("\n");
+ }
+ log.debug(buff.toString());
+ }
+ requestMap.put(AjaxContext.USER_STYLES_PARAMETER, userStyles);
+ }
+ // Mark as processed.
+ requestMap.put(RESOURCES_PROCESSED, Boolean.TRUE);
+ // Save viewId for a parser selection
+ requestMap.put(AjaxViewHandler.VIEW_ID_KEY, context.getViewRoot().getViewId());
}
}
@@ -173,4 +390,75 @@
}
}
+
+ private static String getInitParameterValue(FacesContext context, String parameterName) {
+
+ String key = INIT_PARAMETER_PREFIX + parameterName;
+
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String, Object> applicationMap = externalContext.getApplicationMap();
+ Object mutex = externalContext.getRequest();
+ Object parameterValue = null;
+
+ synchronized (mutex) {
+ parameterValue = applicationMap.get(key);
+
+ if (parameterValue == null) {
+
+ String initParameter = externalContext.getInitParameter(parameterName);
+ if (initParameter != null) {
+
+ if (ELUtils.isValueReference(initParameter)) {
+ Application application = context.getApplication();
+ ExpressionFactory expressionFactory = application.getExpressionFactory();
+
+ parameterValue = expressionFactory.createValueExpression(context.getELContext(),
+ initParameter,
+ String.class);
+ } else {
+ parameterValue = initParameter;
+ }
+
+ } else {
+ parameterValue = NULL;
+ }
+
+ applicationMap.put(key, parameterValue);
+ }
+ }
+
+ return evaluate(context, parameterValue);
+ }
+
+ private static String evaluate(FacesContext context, Object parameterValue) {
+ if (parameterValue == NULL || parameterValue == null) {
+ return null;
+ } else if (parameterValue instanceof ValueExpression) {
+ ValueExpression expression = (ValueExpression) parameterValue;
+
+ return (String) expression.getValue(context.getELContext());
+ } else {
+ return parameterValue.toString();
+ }
+ }
+
+ private static boolean isExtendedSkinningEnabled(ExternalContext context) {
+ String userAgent = context.getRequestHeaderMap().get("User-Agent");
+ if (userAgent != null) {
+ boolean apply = !USER_AGENTS.matcher(userAgent).find();
+
+ if (log.isDebugEnabled()) {
+ log.debug("Got User-Agent: " + userAgent);
+ log.debug("Applying extended CSS controls styling = " + apply);
+ }
+
+ return apply;
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug("User-Agent is null, applying extended CSS controls styling");
+ }
+
+ return true;
+ }
+ }
}
16 years
JBoss Rich Faces SVN: r9100 - trunk/framework/impl/src/main/java/org/ajax4jsf/context.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-18 13:21:59 -0400 (Wed, 18 Jun 2008)
New Revision: 9100
Added:
trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
Log:
RF-2815
Added: trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java (rev 0)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/context/ViewResourcesPhaseEventHandler.java 2008-06-18 17:21:59 UTC (rev 9100)
@@ -0,0 +1,176 @@
+/**
+ *
+ */
+package org.ajax4jsf.context;
+
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import javax.faces.FactoryFinder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+import javax.faces.render.Renderer;
+
+import org.ajax4jsf.renderkit.HeaderResourceProducer;
+import org.ajax4jsf.renderkit.UserResourceRenderer;
+import org.ajax4jsf.resource.InternetResourceBuilder;
+import org.ajax4jsf.webapp.BaseFilter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.richfaces.event.ComponentPhaseEventHandler;
+import org.richfaces.skin.Skin;
+import org.richfaces.skin.SkinFactory;
+import org.richfaces.skin.SkinNotFoundException;
+
+public class ViewResourcesPhaseEventHandler implements
+ ComponentPhaseEventHandler {
+
+ private static final Log log = LogFactory.getLog(ViewResourcesPhaseEventHandler.class);
+
+ //TODO remove this in other
+ public static final String RESOURCES_PROCESSED = "org.ajax4jsf.framework.HEADER_PROCESSED";
+
+ /* (non-Javadoc)
+ * @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseBegin(javax.faces.event.PhaseEvent)
+ */
+ public Object beforePhaseBegin(PhaseEvent event) {
+ Object result = false;
+ FacesContext context = event.getFacesContext();
+ ExternalContext externalContext = context.getExternalContext();
+ Map<String,Object> requestMap = externalContext.getRequestMap();
+ if (!Boolean.TRUE.equals(requestMap.get(RESOURCES_PROCESSED))) {
+ if (null != requestMap.get(BaseFilter.RESPONSE_WRAPPER_ATTRIBUTE)) {
+ RenderKitFactory rkFactory = (RenderKitFactory) FactoryFinder
+ .getFactory(FactoryFinder.RENDER_KIT_FACTORY);
+ RenderKit renderKit = rkFactory.getRenderKit(context, context
+ .getViewRoot().getRenderKitId());
+
+ Boolean processStyles = true;
+ Boolean processScripts = true;
+
+ try {
+ Skin skin = SkinFactory.getInstance().getSkin(context);
+ // For a "NULL" skin, do not collect components stylesheets
+ processStyles = !"false".equals(skin.getParameter(context,
+ Skin.loadStyleSheets));
+ } catch (SkinNotFoundException e) {
+ log.warn("Current Skin is not found", e);
+ }
+ // Check init parameters for a resources processing.
+ String scriptStrategy = externalContext
+ .getInitParameter(InternetResourceBuilder.LOAD_SCRIPT_STRATEGY_PARAM);
+ processScripts = !(InternetResourceBuilder.LOAD_NONE .equals(scriptStrategy)
+ || InternetResourceBuilder.LOAD_ALL .equals(scriptStrategy));
+
+ String styleStrategy = externalContext
+ .getInitParameter(InternetResourceBuilder.LOAD_STYLE_STRATEGY_PARAM);
+ processStyles = !(InternetResourceBuilder.LOAD_NONE.equals(styleStrategy)
+ || InternetResourceBuilder.LOAD_ALL.equals(styleStrategy));
+
+ LinkedHashSet<String> scripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> styles = new LinkedHashSet<String>();
+ LinkedHashSet<String> userScripts = new LinkedHashSet<String>();
+ LinkedHashSet<String> userStyles = new LinkedHashSet<String>();
+ result = new Object[] {renderKit, processStyles, processScripts, scripts, styles, userScripts, userStyles};
+ }
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.event.ComponentPhaseEventHandler#beforePhaseEnd(javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void beforePhaseEnd(PhaseEvent event, Object state) {
+ if (!Boolean.FALSE.equals(state)) {
+ Object[] objects = (Object[]) state;
+ Set<?> scripts = (Set<?>) objects[3];
+ Set<?> styles = (Set<?>) objects[4];
+ Set<?> userScripts = (Set<?>) objects[5];
+ Set<?> userStyles = (Set<?>) objects[6];
+ //TODO save these sets
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.event.ComponentPhaseEventHandler#componentBegin(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ @SuppressWarnings("unchecked")
+ public void componentBegin(UIComponent component, PhaseEvent event,
+ Object state) {
+ if (!Boolean.FALSE.equals(state)) {
+ Object[] objects = (Object[]) state;
+ RenderKit renderKit = (RenderKit) objects[0];
+ boolean processStyles = (Boolean) objects[1];
+ boolean processScripts = (Boolean) objects[2];
+ Set<String> scripts = (Set<String>) objects[3];
+ Set<String> styles = (Set<String>) objects[4];
+ Set<String> userScripts = (Set<String>) objects[5];
+ Set<String> userStyles = (Set<String>) objects[6];
+ FacesContext context = event.getFacesContext();
+ Renderer renderer = getRenderer(context, component, renderKit);
+ if (null != renderer) {
+ if ((processScripts || processStyles)
+ && renderer instanceof HeaderResourceProducer) {
+ HeaderResourceProducer producer = (HeaderResourceProducer) renderer;
+ if (processScripts) {
+ Set<String> set = producer.getHeaderScripts(context,
+ component);
+ if (null != set) {
+ scripts.addAll(set);
+ }
+
+ }
+ if (processStyles) {
+ Set<String> set = producer.getHeaderStyles(context,
+ component);
+ if (null != set) {
+ styles.addAll(set);
+ }
+
+ }
+ } else if (renderer instanceof UserResourceRenderer) {
+ UserResourceRenderer producer = (UserResourceRenderer) renderer;
+ Set<String> set = producer.getHeaderScripts(context,
+ component);
+ if (null != set) {
+ userScripts.addAll(set);
+ }
+ set = producer.getHeaderStyles(context, component);
+ if (null != set) {
+ userStyles.addAll(set);
+ }
+ }
+
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.richfaces.event.ComponentPhaseEventHandler#componentEnd(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent, java.lang.Object)
+ */
+ public void componentEnd(UIComponent component, PhaseEvent event,
+ Object state) {}
+
+ /**
+ * Find renderer for given component.
+ *
+ * @param context
+ * @param comp
+ * @param renderKit
+ * @return
+ */
+ private static Renderer getRenderer(FacesContext context, UIComponent comp, RenderKit renderKit) {
+ String rendererType = comp.getRendererType();
+ if (rendererType != null) {
+ return (renderKit.getRenderer(comp.getFamily(), rendererType));
+ } else {
+ return (null);
+ }
+
+ }
+}
16 years
JBoss Rich Faces SVN: r9099 - in trunk: framework/impl/src/main/java/org/ajax4jsf/component and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2008-06-18 12:26:52 -0400 (Wed, 18 Jun 2008)
New Revision: 9099
Modified:
trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
Log:
RF-2815
Modified: trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java
===================================================================
--- trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-18 15:21:17 UTC (rev 9098)
+++ trunk/framework/api/src/main/java/org/richfaces/event/ComponentPhaseEventHandler.java 2008-06-18 16:26:52 UTC (rev 9099)
@@ -1,11 +1,9 @@
package org.richfaces.event;
-import java.io.Serializable;
-
import javax.faces.component.UIComponent;
import javax.faces.event.PhaseEvent;
-public interface ComponentPhaseEventHandler extends Serializable {
+public interface ComponentPhaseEventHandler {
Object beforePhaseBegin(PhaseEvent event);
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-18 15:21:17 UTC (rev 9098)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/component/UIDataAdaptorPhaseEventHandler.java 2008-06-18 16:26:52 UTC (rev 9099)
@@ -11,11 +11,6 @@
public class UIDataAdaptorPhaseEventHandler implements
ComponentPhaseEventHandler {
- /**
- *
- */
- private static final long serialVersionUID = -1356035330152521515L;
-
/* (non-Javadoc)
* @see org.richfaces.event.ComponentPhaseEventHandler#bcomponentEnd(javax.faces.component.UIComponent, javax.faces.event.PhaseEvent, java.lang.Object)
*/
Modified: trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-18 15:21:17 UTC (rev 9098)
+++ trunk/framework/impl/src/main/java/org/richfaces/event/ComponentViewPhaseListener.java 2008-06-18 16:26:52 UTC (rev 9099)
@@ -18,19 +18,17 @@
*/
private static final long serialVersionUID = -2437433246178955788L;
- private static ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
- private static Object[] states = null;
-
public void afterPhase(PhaseEvent event) {
}
- private void beforePhase(PhaseEvent event, UIComponent component) {
+ private void beforePhase(PhaseEvent event, UIComponent component,
+ ComponentPhaseEventHandler[] handlers, Object[] states) {
for (int i = 0; i < handlers.length; i++) {
handlers[i].componentBegin(component, event, states[i]);
}
Iterator<UIComponent> children = component.getFacetsAndChildren();
while (children.hasNext()) {
- beforePhase(event, children.next());
+ beforePhase(event, children.next(), handlers, states);
}
for (int i = 0; i < handlers.length; i++) {
handlers[i].componentEnd(component, event, states[i]);
@@ -38,19 +36,19 @@
}
public void beforePhase(PhaseEvent event) {
- states = new Object[handlers.length];
+ ComponentPhaseEventHandler[] handlers = ComponentPhaseEventHandlerUtils.getHandlers();
+ Object[] states = new Object[handlers.length];
for (int i = 0; i < handlers.length; i++) {
states[i] = handlers[i].beforePhaseBegin(event);
}
FacesContext facesContext = event.getFacesContext();
UIViewRoot viewRoot = facesContext.getViewRoot();
if (viewRoot != null && handlers != null) {
- beforePhase(event, viewRoot);
+ beforePhase(event, viewRoot, handlers, states);
}
for (int i = 0; i < handlers.length; i++) {
handlers[i].beforePhaseEnd(event, states[i]);
}
- states = null;
}
public PhaseId getPhaseId() {
Modified: trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java
===================================================================
--- trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-18 15:21:17 UTC (rev 9098)
+++ trunk/framework/impl/src/main/java/org/richfaces/util/ComponentPhaseEventHandlerUtils.java 2008-06-18 16:26:52 UTC (rev 9099)
@@ -5,9 +5,11 @@
import java.net.URL;
import java.util.Enumeration;
import java.util.LinkedList;
+import java.util.Map;
import java.util.Scanner;
import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
import org.ajax4jsf.resource.util.URLToStreamHelper;
import org.ajax4jsf.util.ServicesUtils;
@@ -15,22 +17,25 @@
public class ComponentPhaseEventHandlerUtils{
- static private ComponentPhaseEventHandler[] handlers = null;
-
+ private static final String KEY = ComponentPhaseEventHandlerUtils.class.getName();
+
private ComponentPhaseEventHandlerUtils() {}
public static ComponentPhaseEventHandler[] getHandlers() {
- if (handlers == null) {
- synchronized(ComponentPhaseEventHandlerUtils.class) {
- if (handlers == null) {
- init();
- }
- }
+ FacesContext context = FacesContext.getCurrentInstance();
+ Map<String, Object> applicationMap = context.getExternalContext().getApplicationMap();
+ ComponentPhaseEventHandler[] handlers;
+ synchronized(applicationMap) {
+ handlers = (ComponentPhaseEventHandler[])applicationMap.get(KEY);
+ if (handlers == null) {
+ handlers = init();
+ applicationMap.put(KEY, handlers);
+ }
}
return handlers;
}
- private static void init() {
+ private static ComponentPhaseEventHandler[] init() {
LinkedList<ComponentPhaseEventHandler> list = new LinkedList<ComponentPhaseEventHandler>();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
String resource = "META-INF/services/org.richfaces.component.ComponentPhaseEventHandler";
@@ -56,6 +61,6 @@
} catch (IOException e) {
throw new FacesException("Error load resource "+ resource, e);
}
- handlers = list.toArray(new ComponentPhaseEventHandler[list.size()]);
+ return list.toArray(new ComponentPhaseEventHandler[list.size()]);
}
}
Modified: trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java
===================================================================
--- trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-18 15:21:17 UTC (rev 9098)
+++ trunk/ui/datascroller/src/main/java/org/richfaces/component/DataScrollerViewPhaseListener.java 2008-06-18 16:26:52 UTC (rev 9099)
@@ -51,11 +51,6 @@
public class DataScrollerViewPhaseListener implements ComponentPhaseEventHandler {
- /**
- *
- */
- private static final long serialVersionUID = -3614288642745891577L;
-
private static final Log log = LogFactory.getLog(DataScrollerViewPhaseListener.class);
private static final class ComponentConnections {
16 years