You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by to...@apache.org on 2005/11/09 15:44:36 UTC

svn commit: r332048 - in /myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu: ./ htmlnavmenu/

Author: tomsp
Date: Wed Nov  9 06:44:30 2005
New Revision: 332048

URL: http://svn.apache.org/viewcvs?rev=332048&view=rev
Log:
ActionSource functionality for HtmlNavigationMenu and JSCookmenu

Modified:
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuUtils.java
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
    myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/HtmlNavigationMenuItemTag.java Wed Nov  9 06:44:30 2005
@@ -34,6 +34,8 @@
 
     private String _icon;
     private String _action;
+    private String _actionListener;
+    private String _immediate;
     private String _split;
 
     // User Role support
@@ -66,23 +68,26 @@
         setItemValue("0"); // itemValue not used
         super.setProperties(component);
         setStringProperty(component, ICON_ATTR, _icon);
-        // set action attribute as String!
-
-        if(_action != null)
-            component.getAttributes().put(ACTION_ATTR, _action);
 
         setBooleanProperty(component, SPLIT_ATTR, _split);
 
         setStringProperty(component, UserRoleAware.ENABLED_ON_USER_ROLE_ATTR, _enabledOnUserRole);
         setStringProperty(component, UserRoleAware.VISIBLE_ON_USER_ROLE_ATTR, _visibleOnUserRole);
+        setActionProperty(component, _action);
+        setActionListenerProperty(component, _actionListener);
+        setBooleanProperty(component, JSFAttr.IMMEDIATE_ATTR, _immediate);
     }
 
-
     public void setAction(String action)
     {
         _action = action;
     }
 
+    public void setActionListener(String actionListener)
+    {
+        _actionListener = actionListener;
+    }
+
     public void setIcon(String icon)
     {
         _icon = icon;
@@ -91,6 +96,11 @@
     public void setSplit(String split)
     {
         _split = split;
+    }
+
+    public void setImmediate(String immediate)
+    {
+        _immediate = immediate;
     }
 
     public void setVisibleOnUserRole(String visibleOnUserRole)

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuItem.java Wed Nov  9 06:44:30 2005
@@ -29,6 +29,7 @@
     private static final long serialVersionUID = 2801735314476639024L;
     private String _icon;
     private String _action;
+    private String _actionListener;
     private boolean _open;
     private boolean _active;
     boolean _split;
@@ -133,6 +134,16 @@
     public void setActive(boolean active)
     {
         _active = active;
+    }
+
+    public String getActionListener()
+    {
+        return _actionListener;
+    }
+
+    public void setActionListener(String actionListener)
+    {
+        _actionListener = actionListener;
     }
 
     public NavigationMenuItem[] getNavigationMenuItems()

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuUtils.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuUtils.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuUtils.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/NavigationMenuUtils.java Wed Nov  9 06:44:30 2005
@@ -22,6 +22,7 @@
 import javax.faces.component.UIComponent;
 import javax.faces.component.UISelectItems;
 import javax.faces.context.FacesContext;
+import javax.faces.el.MethodBinding;
 import java.util.*;
 
 /**
@@ -62,15 +63,32 @@
                     {
                         itemLabel = itemValue.toString();
                     }
+                    String actionStr = null;
+                    MethodBinding action = uiItem.getAction();
+                    if (action != null)
+                    {
+                        FacesContext context = FacesContext.getCurrentInstance();
+                        if (action.getType(context) == String.class)
+                        {
+                            actionStr = (String) action.invoke(context, null);
+                        }
+                        else
+                        {
+                            actionStr = action.getExpressionString();
+                        }
+                    }
                     item = new NavigationMenuItem(itemValue,
                                                   itemLabel,
                                                   uiItem.getItemDescription(),
                                                   uiItem.isItemDisabled() || ! UserRoleUtils.isEnabledOnUserRole(uiItem),
                                                   uiItem.isRendered(),
-                                                  uiItem.getAction(),
+                                                  actionStr,
                                                   uiItem.getIcon(),
                                                   uiItem.isSplit());
+                    if (uiItem.getActionListener() != null)
+                        item.setActionListener(uiItem.getActionListener().getExpressionString());
                 }
+
                 list.add(item);
                 if (child.getChildCount() > 0)
                 {

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/UINavigationMenuItem.java Wed Nov  9 06:44:30 2005
@@ -19,28 +19,32 @@
 import org.apache.myfaces.component.UserRoleAware;
 
 import javax.faces.component.UISelectItem;
+import javax.faces.component.ActionSource;
 import javax.faces.el.ValueBinding;
+import javax.faces.el.MethodBinding;
 import javax.faces.context.FacesContext;
+import javax.faces.event.ActionListener;
 
 /**
  * @author Thomas Spiegl (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
-public class UINavigationMenuItem extends UISelectItem implements UserRoleAware
+public class UINavigationMenuItem extends UISelectItem implements UserRoleAware, ActionSource
 {
-
-    //------------------ GENERATED CODE BEGIN (do not modify!) --------------------
+    private static final boolean DEFAULT_IMMEDIATE = true;
 
     public static final String COMPONENT_TYPE = "org.apache.myfaces.NavigationMenuItem";
     public static final String COMPONENT_FAMILY = "javax.faces.SelectItem";
 
     private String _icon = null;
     private Boolean _split = null;
-    private String _action = null;
     private String _enabledOnUserRole = null;
     private String _visibleOnUserRole = null;
     private Boolean _open = null;
     private Boolean _active = null;
+    private MethodBinding _action = null;
+    private MethodBinding _actionListener = null;
+    private Boolean _immediate = null;
 
     public UINavigationMenuItem()
     {
@@ -77,11 +81,6 @@
         return v != null && v.booleanValue();
     }
 
-    public void setAction(String action)
-    {
-        _action = action;
-    }
-
     public void setOpen(boolean open)
     {
         _open = Boolean.valueOf(open);
@@ -108,13 +107,57 @@
         return v != null && v.booleanValue();
     }
 
-    public String getAction()
+    public void setImmediate(boolean immediate)
     {
-        if (_action != null) return _action;
-        ValueBinding vb = getValueBinding("action");
-        return vb != null ? (String)vb.getValue(getFacesContext()) : null;
+        _immediate = Boolean.valueOf(immediate);
+    }
+
+    public boolean isImmediate()
+    {
+        if (_immediate != null) return _immediate.booleanValue();
+        ValueBinding vb = getValueBinding("immediate");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null ? v.booleanValue() : DEFAULT_IMMEDIATE;
+    }
+
+    // Action Source
+
+    public void setAction(MethodBinding action)
+    {
+        _action = action;
+    }
+
+    public MethodBinding getAction()
+    {
+        return _action;
     }
 
+    public void setActionListener(MethodBinding actionListener)
+    {
+        _actionListener = actionListener;
+    }
+
+    public MethodBinding getActionListener()
+    {
+        return _actionListener;
+    }
+
+    public void addActionListener(ActionListener listener)
+    {
+        addFacesListener(listener);
+    }
+
+    public ActionListener[] getActionListeners()
+    {
+        return (ActionListener[])getFacesListeners(ActionListener.class);
+    }
+
+    public void removeActionListener(ActionListener listener)
+    {
+        removeFacesListener(listener);
+    }
+    // Action Source
+
     public void setEnabledOnUserRole(String enabledOnUserRole)
     {
         _enabledOnUserRole = enabledOnUserRole;
@@ -139,7 +182,6 @@
         return vb != null ? (String)vb.getValue(getFacesContext()) : null;
     }
 
-
     public boolean isRendered()
     {
         if (!UserRoleUtils.isVisibleOnUserRole(this)) return false;
@@ -148,29 +190,32 @@
 
     public Object saveState(FacesContext context)
     {
-        Object values[] = new Object[8];
+        Object values[] = new Object[10];
         values[0] = super.saveState(context);
         values[1] = _icon;
         values[2] = _split;
-        values[3] = _action;
+        values[3] = saveAttachedState(context, _action);
         values[4] = _enabledOnUserRole;
         values[5] = _visibleOnUserRole;
         values[6] = _open;
         values[7] = _active;
+        values[8] = saveAttachedState(context, _actionListener);
+        values[9] = _immediate;
         return ((Object) (values));
     }
-    
+
     public void restoreState(FacesContext context, Object state)
     {
         Object values[] = (Object[])state;
         super.restoreState(context, values[0]);
         _icon = (String)values[1];
         _split = (Boolean)values[2];
-        _action = (String)values[3];
+        _action = (MethodBinding)restoreAttachedState(context, values[3]);
         _enabledOnUserRole = (String)values[4];
         _visibleOnUserRole = (String)values[5];
         _open = (Boolean)values[6];
         _active = (Boolean)values[7];
+        _actionListener = (MethodBinding)restoreAttachedState(context, values[8]);
+        _immediate = (Boolean)values[9];
     }
-    //------------------ GENERATED CODE END ---------------------------------------
 }

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRenderer.java Wed Nov  9 06:44:30 2005
@@ -31,6 +31,7 @@
 import javax.faces.component.UIViewRoot;
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
+import javax.faces.event.ActionListener;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -220,7 +221,15 @@
             newItem.getClientId(facesContext); // create clientid
             newItem.setParent(parent);
             children.add(startIndex++, newItem);
-            newItem.setAction(uiNavMenuItem.getAction());
+            if (uiNavMenuItem.getAction() != null)
+            {
+                newItem.setAction(HtmlNavigationMenuRendererUtils.getMethodBinding(facesContext, uiNavMenuItem.getAction(), false));
+            }
+            if (uiNavMenuItem.getActionListener() != null)
+            {
+                newItem.setActionListener(HtmlNavigationMenuRendererUtils.getMethodBinding(facesContext,
+                                                                                           uiNavMenuItem.getActionListener(), true));
+            }
             newItem.setIcon(uiNavMenuItem.getIcon());
             newItem.setRendered(uiNavMenuItem.isRendered());
             newItem.setSplit(uiNavMenuItem.isSplit());
@@ -250,11 +259,17 @@
         newItem.setRendererType(RENDERER_TYPE);
         parent.getChildren().add(i + 1, newItem);
         newItem.setParent(parent);
-        // set action
-        if (uiNavMenuItem.getAction() != null)
+        // set action & actionListner
+        newItem.setAction(uiNavMenuItem.getAction());
+        newItem.setActionListener(uiNavMenuItem.getActionListener());
+        ActionListener[] listeners = uiNavMenuItem.getActionListeners();
+        for (int j = 0; j < listeners.length; j++)
         {
-            newItem.setAction(HtmlNavigationMenuRendererUtils.getMethodBinding(facesContext, uiNavMenuItem.getAction()));
+            newItem.addActionListener(listeners[j]);
+
         }
+        // immeditate
+        newItem.setImmediate(uiNavMenuItem.isImmediate());
         // transient, rendered
         newItem.setTransient(uiNavMenuItem.isTransient());
         newItem.setRendered(uiNavMenuItem.isRendered());

Modified: myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java
URL: http://svn.apache.org/viewcvs/myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java?rev=332048&r1=332047&r2=332048&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java (original)
+++ myfaces/tomahawk/trunk/src/java/org/apache/myfaces/custom/navmenu/htmlnavmenu/HtmlNavigationMenuRendererUtils.java Wed Nov  9 06:44:30 2005
@@ -6,6 +6,7 @@
 import org.apache.myfaces.custom.navmenu.UINavigationMenuItem;
 import org.apache.myfaces.el.SimpleActionMethodBinding;
 import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import javax.faces.context.FacesContext;
 import javax.faces.context.ResponseWriter;
@@ -14,6 +15,7 @@
 import javax.faces.component.UIViewRoot;
 import javax.faces.el.MethodBinding;
 import javax.faces.webapp.UIComponentTag;
+import javax.faces.event.ActionEvent;
 import java.util.List;
 import java.util.Iterator;
 import java.io.IOException;
@@ -24,6 +26,10 @@
  */
 class HtmlNavigationMenuRendererUtils
 {
+    private static final Log log = LogFactory.getLog(HtmlNavigationMenuRendererUtils.class);
+
+    private static final Class[] ACTION_LISTENER_ARGS = {ActionEvent.class};
+
     private HtmlNavigationMenuRendererUtils() {}
 
     public static void renderChildrenListLayout(FacesContext facesContext,
@@ -284,16 +290,24 @@
         return previousItem;
     }
 
-    public static MethodBinding getMethodBinding(FacesContext facesContext, String value)
+    public static MethodBinding getMethodBinding(FacesContext facesContext, String value, boolean actionListener)
     {
         MethodBinding mb;
         if (HtmlNavigationMenuRendererUtils.isValueReference(value))
         {
-            mb = facesContext.getApplication().createMethodBinding(value, null);
+            mb = facesContext.getApplication().createMethodBinding(value, actionListener ? ACTION_LISTENER_ARGS : null);
         }
         else
         {
-            mb = new SimpleActionMethodBinding(value);
+            if (actionListener)
+            {
+                log.error("Invalid actionListener value " + value + " (has to be ValueReference!)");
+                mb = null;
+            }
+            else
+            {
+                mb = new SimpleActionMethodBinding(value);
+            }
         }
         return mb;
     }