Author: nbelaevski
Date: 2010-05-20 15:17:03 -0400 (Thu, 20 May 2010)
New Revision: 17170
Modified:
root/ui/core/trunk/api/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/html/AjaxHandler.java
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/tag/BehaviorRule.java
Log:
AjaxBehavior bug fixes:
- arbitrary meta-component IDs weren't accepted
- "execute"/"render" referencing string EL-expression threw exception
Modified:
root/ui/core/trunk/api/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java
===================================================================
---
root/ui/core/trunk/api/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java 2010-05-20
18:05:21 UTC (rev 17169)
+++
root/ui/core/trunk/api/src/main/java/org/ajax4jsf/component/behavior/AjaxBehavior.java 2010-05-20
19:17:03 UTC (rev 17170)
@@ -54,11 +54,11 @@
data, execute, onbeforedomupdate, onbegin, oncomplete, onerror, onevent, queueId,
render, similarityGroupingId, status, disabled, limitRender, immediate, behaviorListener
}
- private static final Set<String> ALL =
Collections.singleton("@all");
- private static final Set<String> FORM =
Collections.singleton("@form");
- private static final Set<String> THIS =
Collections.singleton("@this");
- private static final Set<String> REGION =
Collections.singleton("@region");
- private static final Set<String> NONE =
Collections.singleton("@none");
+ private static final Set<String> ALL_SINGLETON_SET =
Collections.singleton(AjaxRendererUtils.ALL);
+ private static final Set<String> FORM_SINGLETON_SET =
Collections.singleton(AjaxRendererUtils.FORM);
+ private static final Set<String> THIS_SINGLETON_SET =
Collections.singleton(AjaxRendererUtils.THIS);
+ private static final Set<String> REGION_SINGLETON_SET =
Collections.singleton(AjaxRendererUtils.REGION);
+ private static final Set<String> NONE_SINGLETON_SET =
Collections.singleton(AjaxRendererUtils.NONE);
@Override
public void setLiteralAttribute(String name, Object value) {
@@ -124,23 +124,17 @@
}
if (value.charAt(0) == '@') {
- Set<String> list;
-
if (AjaxRendererUtils.ALL.equals(value)) {
- list = ALL;
+ return ALL_SINGLETON_SET;
} else if (AjaxRendererUtils.FORM.equals(value)) {
- list = FORM;
+ return FORM_SINGLETON_SET;
} else if (AjaxRendererUtils.THIS.equals(value)) {
- list = THIS;
+ return THIS_SINGLETON_SET;
} else if (AjaxRendererUtils.REGION.equals(value)) {
- list = REGION;
+ return REGION_SINGLETON_SET;
} else if (AjaxRendererUtils.NONE.equals(value)) {
- list = NONE;
- } else {
- throw new FacesException(value + " : Invalid id keyword specified
for '" + propertyName + "' attribute");
+ return NONE_SINGLETON_SET;
}
-
- return list;
}
return Collections.singleton(value);
}
@@ -153,8 +147,15 @@
getStateHelper().put(PropertyKeys.data, data);
}
+ @SuppressWarnings("unchecked")
public Collection<String> getExecute() {
- return (Collection<String>) getStateHelper().eval(PropertyKeys.execute);
+ Object executeObject = getStateHelper().eval(PropertyKeys.execute);
+
+ if (executeObject instanceof Collection<?>) {
+ return (Collection<String>) executeObject;
+ } else {
+ return AjaxRendererUtils.asSet(executeObject);
+ }
}
public void setExecute(Collection<String> execute) {
@@ -209,8 +210,15 @@
getStateHelper().put(PropertyKeys.queueId, queueId);
}
+ @SuppressWarnings("unchecked")
public Collection<String> getRender() {
- return (Collection<String>) getStateHelper().eval(PropertyKeys.render);
+ Object renderObject = getStateHelper().eval(PropertyKeys.render);
+
+ if (renderObject instanceof Collection<?>) {
+ return (Collection<String>) renderObject;
+ } else {
+ return AjaxRendererUtils.asSet(renderObject);
+ }
}
public void setRender(Collection<String> render) {
Modified:
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/html/AjaxHandler.java
===================================================================
---
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/html/AjaxHandler.java 2010-05-20
18:05:21 UTC (rev 17169)
+++
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/html/AjaxHandler.java 2010-05-20
19:17:03 UTC (rev 17170)
@@ -186,4 +186,5 @@
return eventName;
}
+
}
Modified:
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/tag/BehaviorRule.java
===================================================================
---
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/tag/BehaviorRule.java 2010-05-20
18:05:21 UTC (rev 17169)
+++
root/ui/core/trunk/api/src/main/java/org/richfaces/view/facelets/tag/BehaviorRule.java 2010-05-20
19:17:03 UTC (rev 17170)
@@ -63,9 +63,9 @@
private final TagAttribute attr;
- private final Class type;
+ private final Class<?> type;
- public ValueExpressionMetadata(String name, Class type, TagAttribute attr) {
+ public ValueExpressionMetadata(String name, Class<?> type, TagAttribute
attr) {
this.name = name;
this.attr = attr;
this.type = type;
@@ -82,14 +82,21 @@
if (meta.isTargetInstanceOf(ClientBehavior.class)) {
if (!attribute.isLiteral()) {
- Class type = meta.getPropertyType(name);
- if (type == null) {
+ Class<?> type = meta.getPropertyType(name);
+ //TODO nick -> anton - shouldn't this check be in
AjaxBehaviorRule?
+ if ("execute".equals(name) || "render".equals(name))
{
type = Object.class;
+ } else {
+ type = meta.getPropertyType(name);
+ if (type == null) {
+ type = Object.class;
+ }
}
+
return new ValueExpressionMetadata(name, type, attribute);
- } else if (meta != null) {
-
+ } else {
if (meta.getWriteMethod(name) != null) {
+ //TODO nick -> anton - shouldn't this check be in
AjaxBehaviorRule?
if ("execute".equals(name) ||
"render".equals(name)) {
return new LiteralAttributeMetadata(name, attribute.getValue());
}