Author: abelevich
Date: 2010-05-31 10:29:27 -0400 (Mon, 31 May 2010)
New Revision: 17415
Added:
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/MethodExpressionScrollListener.java
Modified:
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/DatascrollerTagHandler.java
root/ui/iteration/trunk/datascroller/ui/src/main/resources/META-INF/datascroller.taglib.xml
Log:
fix scrollListener, fix RF-8705
Modified:
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java
===================================================================
---
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java 2010-05-31
14:28:31 UTC (rev 17414)
+++
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/component/UIDataScroller.java 2010-05-31
14:29:27 UTC (rev 17415)
@@ -26,7 +26,6 @@
import java.util.Map;
import javax.el.ELException;
-import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
@@ -139,7 +138,7 @@
}
public void broadcast(FacesEvent event) throws AbortProcessingException {
- super.broadcast(event);
+
if (event instanceof DataScrollerEvent) {
DataScrollerEvent dataScrollerEvent = (DataScrollerEvent) event;
@@ -148,11 +147,6 @@
FacesContext facesContext = getFacesContext();
- MethodExpression scrollerListener = (MethodExpression)
getStateHelper().eval(PropertyKeys.scrollerListener);
- if (scrollerListener != null) {
- scrollerListener.invoke(facesContext.getELContext(), new Object[] {event
});
- }
-
UIComponent dataTable = getDataTable();
List<UIDataScroller> dataScrollers =
DataScrollerUtils.findDataScrollers(dataTable);
@@ -170,7 +164,16 @@
}
facesContext.getPartialViewContext().getRenderIds().add(dataTableId);
+
+ //add datascroller to render
+ String dataScrollerId = getClientId(facesContext);
+
if(!facesContext.getPartialViewContext().getRenderIds().contains(dataScrollerId)) {
+ facesContext.getPartialViewContext().getRenderIds().add(dataScrollerId);
+ }
+
}
+
+ super.broadcast(event);
}
/**
Modified:
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/DatascrollerTagHandler.java
===================================================================
---
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/DatascrollerTagHandler.java 2010-05-31
14:28:31 UTC (rev 17414)
+++
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/DatascrollerTagHandler.java 2010-05-31
14:29:27 UTC (rev 17415)
@@ -52,9 +52,40 @@
return null;
}
}
+ };
+ private static final MetaRule SCROLL_LISTENER_RULE = new MetaRule() {
+
+ @Override
+ public Metadata applyRule(String name, TagAttribute attribute, MetadataTarget
meta) {
+ if (meta.isTargetInstanceOf(UIDataScroller.class)) {
+ if ("scrollListener".equals(name)) {
+ return new ScrollListenerMapper(attribute);
+ }
+ }
+ return null;
+ }
+
};
+ private static final class ScrollListenerMapper extends Metadata {
+
+ private static final Class[] SIGNATURE = new Class[] {
org.richfaces.event.DataScrollerEvent.class };
+
+ private final TagAttribute attribute;
+
+ public ScrollListenerMapper(TagAttribute attribute) {
+ this.attribute = attribute;
+ }
+
+ @Override
+ public void applyMetadata(FaceletContext ctx, Object instance) {
+
+ ((UIDataScroller) instance).addScrollerListener((new
MethodExpressionScrollListener(this.attribute
+ .getMethodExpression(ctx, null, SIGNATURE))));
+ }
+ }
+
private static final class PageMapper extends Metadata {
private final TagAttribute page;
@@ -65,6 +96,7 @@
public void applyMetadata(FaceletContext ctx, Object instance) {
UIDataScroller datascroller = (UIDataScroller) instance;
+
ValueExpression ve = page.getValueExpression(ctx, int.class);
if (ve.isLiteralText()) {
Integer value = (Integer)
ve.getValue(ctx.getFacesContext().getELContext());
@@ -83,6 +115,7 @@
protected MetaRuleset createMetaRuleset(Class type) {
MetaRuleset ruleset = super.createMetaRuleset(type);
ruleset.addRule(PAGERULE);
+ ruleset.addRule(SCROLL_LISTENER_RULE);
return ruleset;
}
}
Added:
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/MethodExpressionScrollListener.java
===================================================================
---
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/MethodExpressionScrollListener.java
(rev 0)
+++
root/ui/iteration/trunk/datascroller/ui/src/main/java/org/richfaces/taglib/MethodExpressionScrollListener.java 2010-05-31
14:29:27 UTC (rev 17415)
@@ -0,0 +1,30 @@
+package org.richfaces.taglib;
+
+import javax.el.MethodExpression;
+import javax.faces.context.FacesContext;
+
+import org.richfaces.event.DataScrollerEvent;
+import org.richfaces.event.DataScrollerListener;
+
+/**
+ * @author Anton Belevich
+ *
+ */
+public class MethodExpressionScrollListener implements DataScrollerListener {
+
+ private MethodExpression methodExpression;
+
+ public MethodExpressionScrollListener() {
+ super();
+ }
+
+ MethodExpressionScrollListener(MethodExpression methodExpression) {
+ super();
+ this.methodExpression = methodExpression;
+ }
+
+ public void processScroller(DataScrollerEvent dataScrollerEvent) {
+ FacesContext facesContext = FacesContext.getCurrentInstance();
+ methodExpression.invoke(facesContext.getELContext(), new Object[] {
dataScrollerEvent });
+ }
+}
Modified:
root/ui/iteration/trunk/datascroller/ui/src/main/resources/META-INF/datascroller.taglib.xml
===================================================================
---
root/ui/iteration/trunk/datascroller/ui/src/main/resources/META-INF/datascroller.taglib.xml 2010-05-31
14:28:31 UTC (rev 17414)
+++
root/ui/iteration/trunk/datascroller/ui/src/main/resources/META-INF/datascroller.taglib.xml 2010-05-31
14:29:27 UTC (rev 17415)
@@ -9,6 +9,7 @@
<component>
<component-type>org.richfaces.DataScroller</component-type>
<renderer-type>org.richfaces.DataScrollerRenderer</renderer-type>
+ <handler-class>org.richfaces.taglib.DatascrollerTagHandler</handler-class>
</component>
</tag>
</facelet-taglib>
Show replies by date