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;
}