You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by aw...@apache.org on 2006/12/09 00:00:53 UTC
svn commit: r484854 - in /incubator/adffaces/trunk/trinidad:
trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/
trinidad-demo/src/main/webapp/demos/
trinidad-impl/src/main/java/org/apache/myfaces/trinidadin...
Author: awiner
Date: Fri Dec 8 16:00:51 2006
New Revision: 484854
URL: http://svn.apache.org/viewvc?view=rev&rev=484854
Log:
ADFFACES-325: Make partialTriggers easier to use with naming containers. In addition to supporting IDs that start with multiple colons as a trick to jump out of naming containers, also added a long-missing warning if the target component can't be found
Modified:
incubator/adffaces/trunk/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/CommonAttrs.xml
incubator/adffaces/trunk/trinidad/trinidad-demo/src/main/webapp/demos/pprDemos.jspx
incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java
Modified: incubator/adffaces/trunk/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/CommonAttrs.xml
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/CommonAttrs.xml?view=diff&rev=484854&r1=484853&r2=484854
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/CommonAttrs.xml (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/components/trinidad/core/includes/CommonAttrs.xml Fri Dec 8 16:00:51 2006
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2006 The Apache Software Foundation.
@@ -14,52 +14,58 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin"
- xmlns:mafp="http://myfaces.apache.org/maven-trinidad-plugin">
- <component>
- <property>
- <description><![CDATA[Specifies CSS styles to use for this component.]]></description>
- <property-name>inlineStyle</property-name>
- <property-class>java.lang.String</property-class>
- <property-extension>
- <mfp:required>false</mfp:required>
- <mfp:property-metadata>
- <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
- </mfp:property-metadata>
- </property-extension>
- </property>
- <property>
- <description><![CDATA[a CSS style class to use for this component.]]></description>
- <property-name>styleClass</property-name>
- <property-class>java.lang.String</property-class>
- <property-extension>
- <mfp:required>false</mfp:required>
- <mfp:property-metadata>
- <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
- </mfp:property-metadata>
- </property-extension>
- </property>
- <property>
- <description><![CDATA[The short description of the component. This text is commonly used by user agents to display tooltip help text.]]>
- </description>
- <property-name>shortDesc</property-name>
- <property-class>java.lang.String</property-class>
- <property-extension>
- <mfp:required>false</mfp:required>
- <mfp:property-metadata>
- <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
- </mfp:property-metadata>
- </property-extension>
- </property>
- <property>
- <description><![CDATA[the IDs of the components that should trigger a partial update.
- This component will listen on the trigger components. If one of the
- trigger components receives an event that will cause it to update
- in some way, this component will request to be updated too.]]>
- </description>
- <property-name>partialTriggers</property-name>
- <property-class>java.lang.String[]</property-class>
- </property>
- </component>
+<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin"
+ xmlns:mafp="http://myfaces.apache.org/maven-trinidad-plugin">
+ <component>
+ <property>
+ <description><![CDATA[Specifies CSS styles to use for this component.]]></description>
+ <property-name>inlineStyle</property-name>
+ <property-class>java.lang.String</property-class>
+ <property-extension>
+ <mfp:required>false</mfp:required>
+ <mfp:property-metadata>
+ <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
+ </mfp:property-metadata>
+ </property-extension>
+ </property>
+ <property>
+ <description><![CDATA[a CSS style class to use for this component.]]></description>
+ <property-name>styleClass</property-name>
+ <property-class>java.lang.String</property-class>
+ <property-extension>
+ <mfp:required>false</mfp:required>
+ <mfp:property-metadata>
+ <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
+ </mfp:property-metadata>
+ </property-extension>
+ </property>
+ <property>
+ <description><![CDATA[The short description of the component. This text is commonly used by user agents to display tooltip help text.]]>
+ </description>
+ <property-name>shortDesc</property-name>
+ <property-class>java.lang.String</property-class>
+ <property-extension>
+ <mfp:required>false</mfp:required>
+ <mfp:property-metadata>
+ <mfp:group>${md:getTranslatedString("CORE_GROUP")}</mfp:group>
+ </mfp:property-metadata>
+ </property-extension>
+ </property>
+ <property>
+ <description><![CDATA[the IDs of the components that should trigger a partial update.
+ This component will listen on the trigger components. If one of the
+ trigger components receives an event that will cause it to update
+ in some way, this component will request to be updated too.
+ Identifiers are relative to the source component, and must account for
+ NamingContainers. If your component is already inside of a naming
+ container, you can use a single colon to start the search from the root,
+ or multiple colons to move up through the NamingContainers - "::" will
+ search from the parent naming container, ":::" will search
+ from the grandparent naming container, etc. ]]>
+ </description>
+ <property-name>partialTriggers</property-name>
+ <property-class>java.lang.String[]</property-class>
+ </property>
+ </component>
</faces-config>
Modified: incubator/adffaces/trunk/trinidad/trinidad-demo/src/main/webapp/demos/pprDemos.jspx
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-demo/src/main/webapp/demos/pprDemos.jspx?view=diff&rev=484854&r1=484853&r2=484854
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-demo/src/main/webapp/demos/pprDemos.jspx (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-demo/src/main/webapp/demos/pprDemos.jspx Fri Dec 8 16:00:51 2006
@@ -246,6 +246,26 @@
text="Go to feature demos page."/>
</tr:panelGroupLayout>
</tr:panelHeader>
+ <tr:panelHeader text="Naming container tests">
+ <tr:panelGroupLayout layout="vertical">
+ <f:subview id="sub">
+ <tr:outputFormatted partialTriggers="::pSub_link ::pSub_button"
+ styleUsage="instruction"
+ value="#{partialDemoUtil.status.linkUpdate}">
+ <f:convertDateTime pattern="HH:mm:ss"/>
+ </tr:outputFormatted>
+ </f:subview>
+ <f:subview id="sub2">
+ <f:subview id="sub3">
+ <tr:outputFormatted partialTriggers=":::pSub_link :::pSub_button"
+ styleUsage="instruction"
+ value="#{partialDemoUtil.status.linkUpdate}">
+ <f:convertDateTime pattern="HH:mm:ss"/>
+ </tr:outputFormatted>
+ </f:subview>
+ </f:subview>
+ </tr:panelGroupLayout>
+ </tr:panelHeader>
<tr:panelHeader text="This Reset button will reset all values on the page.">
<tr:commandButton id="reset"
text="Reset"
Modified: incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java?view=diff&rev=484854&r1=484853&r2=484854
==============================================================================
--- incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java (original)
+++ incubator/adffaces/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/context/RequestContextImpl.java Fri Dec 8 16:00:51 2006
@@ -25,6 +25,7 @@
import java.util.Set;
import java.util.TimeZone;
+import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
@@ -492,20 +493,30 @@
{
String trigger = triggers[i];
- // Wildcards removed for now....
- // if ("*".equals(trigger))
- // master = _GLOBAL_TRIGGER;
- // else
- UIComponent master = listener.getParent().findComponent(trigger);
-
- // Get the set of listeners on this trigger and add this component.
- Set<UIComponent> listeners = pl.get(master);
- if (listeners == null)
+ // Look for the master component. Note that if the listener is itself
+ // a naming container, we don't want to restrict ourselves to looking
+ // inside - we want to look outside instead (at least, that was
+ // the old ADF Faces rules, and now we should stick with it for
+ // backwards compatibility even within Trinidad)
+ UIComponent master = _findRelativeComponent(listener.getParent(),
+ trigger);
+ //listener.getParent().findComponent(trigger);
+ if (master == null)
{
- listeners = new HashSet<UIComponent>();
- pl.put(master, listeners);
+ _LOG.warning("Could not find partial trigger " + trigger +
+ " from " + listener);
+ }
+ else
+ {
+ // Get the set of listeners on this trigger and add this component.
+ Set<UIComponent> listeners = pl.get(master);
+ if (listeners == null)
+ {
+ listeners = new HashSet<UIComponent>();
+ pl.put(master, listeners);
+ }
+ listeners.add(listener);
}
- listeners.add(listener);
}
}
@@ -717,7 +728,42 @@
return _partialListeners;
}
+ static private UIComponent _findRelativeComponent(
+ UIComponent from,
+ String relativeId)
+ {
+ int idLength = relativeId.length();
+ // Figure out how many colons
+ int colonCount = 0;
+ while (colonCount < idLength)
+ {
+ if (relativeId.charAt(colonCount) != NamingContainer.SEPARATOR_CHAR)
+ break;
+ colonCount++;
+ }
+
+ // colonCount == 0: fully relative
+ // colonCount == 1: absolute (still normal findComponent syntax)
+ // colonCount > 1: for each extra colon after 1, go up a naming container
+ // (to the view root, if naming containers run out)
+ if (colonCount > 1)
+ {
+ relativeId = relativeId.substring(colonCount);
+ for (int j = 1; j < colonCount; j++)
+ {
+ while (from.getParent() != null)
+ {
+ from = from.getParent();
+ if (from instanceof NamingContainer)
+ break;
+ }
+ }
+ }
+
+ return from.findComponent(relativeId);
+ }
+
private RequestContextBean _bean;
private HelpProvider _provider;
private Map<UIComponent, Set<UIComponent>> _partialListeners;