Author: abelevich
Date: 2011-02-16 07:55:58 -0500 (Wed, 16 Feb 2011)
New Revision: 21688
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenu.java
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
Log:
RF-10436 Panel Menu Item - doesn't fire item change listener when @bypassUpdates or
@immediate is true when @mode=ajax
Modified: trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenu.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenu.java 2011-02-16
12:46:40 UTC (rev 21687)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/component/AbstractPanelMenu.java 2011-02-16
12:55:58 UTC (rev 21688)
@@ -23,13 +23,6 @@
package org.richfaces.component;
-import org.richfaces.PanelMenuMode;
-import org.richfaces.cdk.annotations.*;
-import org.richfaces.event.ItemChangeEvent;
-import org.richfaces.event.ItemChangeListener;
-import org.richfaces.event.ItemChangeSource;
-import org.richfaces.renderkit.util.PanelIcons;
-
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.component.UIComponent;
@@ -39,6 +32,18 @@
import javax.faces.event.FacesEvent;
import javax.faces.event.PhaseId;
+import org.richfaces.PanelMenuMode;
+import org.richfaces.cdk.annotations.Attribute;
+import org.richfaces.cdk.annotations.EventName;
+import org.richfaces.cdk.annotations.JsfComponent;
+import org.richfaces.cdk.annotations.JsfRenderer;
+import org.richfaces.cdk.annotations.Tag;
+import org.richfaces.cdk.annotations.TagType;
+import org.richfaces.event.ItemChangeEvent;
+import org.richfaces.event.ItemChangeListener;
+import org.richfaces.event.ItemChangeSource;
+import org.richfaces.renderkit.util.PanelIcons;
+
/**
* @author akolonitsky
* @since 2010-10-25
@@ -90,7 +95,17 @@
setSubmittedActiveItem(null);
if (previous == null || !previous.equalsIgnoreCase(activeItem)) {
- queueEvent(new ItemChangeEvent(this, previous, activeItem));
+ AbstractPanelMenuItem prevItm = getItem(previous);
+ AbstractPanelMenuItem actItm = getItem(activeItem);
+ ItemChangeEvent event = new ItemChangeEvent(this, previous, activeItem);
+ if (isImmediate() || (prevItm.isImmediate() || actItm.isImmediate())) {
+ event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
+ } else if (prevItm.isBypassUpdates() || actItm.isBypassUpdates()) {
+ event.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
+ } else {
+ event.setPhaseId(PhaseId.INVOKE_APPLICATION);
+ }
+ event.queue();
}
} catch (RuntimeException e) {
context.renderResponse();
@@ -99,23 +114,6 @@
}
@Override
- public void queueEvent(FacesEvent event) {
- if ((event instanceof ItemChangeEvent) && (event.getComponent() == this))
{
- setEventPhase(event);
- }
-
- super.queueEvent(event);
- }
-
- protected void setEventPhase(FacesEvent event) {
- if (isImmediate()) {
- event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
- } else {
- event.setPhaseId(PhaseId.INVOKE_APPLICATION);
- }
- }
-
- @Override
public void broadcast(FacesEvent event) throws AbortProcessingException {
super.broadcast(event);
@@ -124,8 +122,6 @@
}
}
-
-
public String getSubmittedActiveItem() {
return this.submittedActiveItem;
}
Modified:
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java
===================================================================
---
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2011-02-16
12:46:40 UTC (rev 21687)
+++
trunk/ui/output/ui/src/main/java/org/richfaces/renderkit/html/PanelMenuItemRenderer.java 2011-02-16
12:55:58 UTC (rev 21688)
@@ -74,10 +74,16 @@
Map<String, String> requestMap =
context.getExternalContext().getRequestParameterMap();
+ AbstractPanelMenuItem menuItem = (AbstractPanelMenuItem) component;
String compClientId = component.getClientId(context);
if (requestMap.get(compClientId) != null) {
- new ActionEvent(component).queue();
+ AbstractPanelMenu pm = getParentPanelMenu(menuItem);
+ if (pm.isImmediate()) {
+ menuItem.setImmediate(true);
+ }
+ new ActionEvent(menuItem).queue();
+
if (context.getPartialViewContext().isPartialRequest()) {
//TODO nick - why render item by default?
@@ -236,6 +242,10 @@
return AbstractPanelMenuItem.class;
}
+ private static AbstractPanelMenu getParentPanelMenu(AbstractPanelMenuItem menuItem)
{
+ return (AbstractPanelMenu) ComponentIterators.getParent(menuItem,
PARENT_PANEL_MENU_PREDICATE);
+ }
+
static boolean isParentPanelMenuDisabled(AbstractPanelMenuItem menuItem) {
AbstractPanelMenu parentPanelMenu = (AbstractPanelMenu)
ComponentIterators.getParent(menuItem, PARENT_PANEL_MENU_PREDICATE);
if (parentPanelMenu != null) {
Show replies by date