You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by bo...@apache.org on 2007/08/11 14:49:06 UTC

svn commit: r564909 - in /myfaces/tobago/trunk: contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/ core/src/main/java/org/apache/myfaces/tobago/ core/src/main/java/org/apache/myfaces/tobago/component/

Author: bommel
Date: Sat Aug 11 05:49:05 2007
New Revision: 564909

URL: http://svn.apache.org/viewvc?view=rev&rev=564909
Log:
minor cleanup
added support for setting actions in a composition

Modified:
    myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java
    myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/PopupReferenceHandler.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/TobagoConstants.java
    myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java

Modified: myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java?view=diff&rev=564909&r1=564908&r2=564909
==============================================================================
--- myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java (original)
+++ myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/AttributeHandler.java Sat Aug 11 05:49:05 2007
@@ -20,9 +20,9 @@
 import javax.el.ELException;
 import javax.el.MethodExpression;
 import javax.faces.FacesException;
-import javax.faces.context.FacesContext;
 import javax.faces.component.UIComponent;
 import javax.faces.component.EditableValueHolder;
+import javax.faces.component.ActionSource;
 
 import com.sun.facelets.FaceletContext;
 import com.sun.facelets.el.ELAdaptor;
@@ -38,7 +38,6 @@
 import org.apache.myfaces.tobago.component.SupportsMarkup;
 
 public final class AttributeHandler extends TagHandler {
-  private static final Class [] VALIDATOR = new Class[] {FacesContext.class, UIComponent.class, Object.class};
 
   private final TagAttribute name;
 
@@ -46,24 +45,24 @@
 
   public AttributeHandler(TagConfig config) {
     super(config);
-    this.name = getRequiredAttribute("name");
-    this.value = getRequiredAttribute("value");
+    this.name = getRequiredAttribute(TobagoConstants.ATTR_NAME);
+    this.value = getRequiredAttribute(TobagoConstants.ATTR_VALUE);
   }
 
-  public void apply(FaceletContext ctx, UIComponent parent)
+  public void apply(FaceletContext faceletContext, UIComponent parent)
       throws FacesException, ELException {
     if (parent == null) {
       throw new TagException(tag, "Parent UIComponent was null");
     }
 
     if (ComponentSupport.isNew(parent)) {
-      String nameValue = name.getValue(ctx);
-      if ("rendered".equals(nameValue)) {
+      String nameValue = name.getValue(faceletContext);
+      if (TobagoConstants.ATTR_RENDERED.equals(nameValue)) {
         // TODO expression
         if (value.isLiteral()) {
-          parent.setRendered(value.getBoolean(ctx));
+          parent.setRendered(value.getBoolean(faceletContext));
         } else {
-          ELAdaptor.setExpression(parent, nameValue, value.getValueExpression(ctx, Object.class));
+          ELAdaptor.setExpression(parent, nameValue, value.getValueExpression(faceletContext, Object.class));
         }
       } else if (TobagoConstants.ATTR_RENDERED_PARTIALLY.equals(nameValue) && parent instanceof UICommand) {
         // TODO test expression
@@ -75,15 +74,42 @@
         // TODO test expression
         ComponentUtil.setMarkup(parent, value.getValue());
       } else if (parent instanceof EditableValueHolder && TobagoConstants.ATTR_VALIDATOR.equals(nameValue)) {
-        MethodExpression methodExpression = value.getMethodExpression(ctx, null, VALIDATOR);
+        MethodExpression methodExpression =
+            value.getMethodExpression(faceletContext, null, ComponentUtil.VALIDATOR_ARGS);
         ((EditableValueHolder) parent).setValidator(new LegacyMethodBinding(methodExpression));
+      } else if (parent instanceof ActionSource && TobagoConstants.ATTR_ACTION.equals(nameValue)) {
+        MethodExpression action = getActionMethodExpression(faceletContext, ComponentUtil.ACTION_ARGS, String.class);
+        if (action != null) {
+          // TODO jsf 1.2
+          ((ActionSource)parent).setAction(new LegacyMethodBinding(action));
+        }
+      } else if (parent instanceof ActionSource && TobagoConstants.ATTR_ACTION_LISTENER.equals(nameValue)) {
+        MethodExpression action = getActionMethodExpression(faceletContext, ComponentUtil.ACTION_LISTENER_ARGS, null);
+        if (action != null) {
+          // TODO jsf 1.2
+          ((ActionSource)parent).setActionListener(new LegacyMethodBinding(action));
+        }
       } else if (!parent.getAttributes().containsKey(nameValue)) {
         if (value.isLiteral()) {
           parent.getAttributes().put(nameValue, value.getValue());
         } else {
-          ELAdaptor.setExpression(parent, nameValue, value.getValueExpression(ctx, Object.class));
+          ELAdaptor.setExpression(parent, nameValue, value.getValueExpression(faceletContext, Object.class));
         }
       }
     }
+  }
+
+  private MethodExpression getActionMethodExpression(FaceletContext faceletContext, Class [] args, Class returnType) {
+    if (value.getValue().startsWith("$")) {
+      Object obj = value.getValueExpression(faceletContext, String.class).getValue(faceletContext);
+      if (obj != null && obj instanceof String && ((String)obj).length() > 0) {
+        TagAttribute attribute = new TagAttribute(value.getLocation(), value.getNamespace(),
+            value.getLocalName(), value.getQName(), (String) obj);
+        return attribute.getMethodExpression(faceletContext, returnType, args);
+      }
+    } else {
+      return value.getMethodExpression(faceletContext, returnType, args);
+    }
+    return null;
   }
 }

Modified: myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/PopupReferenceHandler.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/PopupReferenceHandler.java?view=diff&rev=564909&r1=564908&r2=564909
==============================================================================
--- myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/PopupReferenceHandler.java (original)
+++ myfaces/tobago/trunk/contrib/facelets/src/main/java/org/apache/myfaces/tobago/facelets/PopupReferenceHandler.java Sat Aug 11 05:49:05 2007
@@ -31,6 +31,7 @@
 import java.io.IOException;
 
 import org.apache.myfaces.tobago.event.PopupActionListener;
+import org.apache.myfaces.tobago.TobagoConstants;
 
 /*
  * User: bommel
@@ -43,7 +44,7 @@
 
   public PopupReferenceHandler(TagConfig config) {
     super(config);
-    forComponent = getAttribute("for");
+    forComponent = getAttribute(TobagoConstants.ATTR_FOR);
   }
 
   public void apply(FaceletContext faceletContext, UIComponent parent)

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/TobagoConstants.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/TobagoConstants.java?view=diff&rev=564909&r1=564908&r2=564909
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/TobagoConstants.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/TobagoConstants.java Sat Aug 11 05:49:05 2007
@@ -22,6 +22,7 @@
   public static final String SUBCOMPONENT_SEP = "::";
 
 //  public static final String ATTR_ACCESS_KEY = "accessKey";
+  public static final String ATTR_ACTION = "action";
   public static final String ATTR_ACTION_ONCLICK = "onclick";
   public static final String ATTR_ACTION_LINK = "link";
   public static final String ATTR_ACTION_LISTENER = "actionListener";

Modified: myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java
URL: http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java?view=diff&rev=564909&r1=564908&r2=564909
==============================================================================
--- myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java (original)
+++ myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/ComponentUtil.java Sat Aug 11 05:49:05 2007
@@ -101,11 +101,11 @@
 
   private static final String RENDER_KEY_PREFIX
       = "org.apache.myfaces.tobago.component.ComponentUtil.RendererKeyPrefix_";
-
-  private static final Class[] ACTION_LISTENER_ARGS = {ActionEvent.class};
-  private static final Class[] VALUE_CHANGE_LISTENER_ARGS = {ValueChangeEvent.class};
-  private static final Class[] VALIDATOR_ARGS =
-      {FacesContext.class, UIComponent.class, Object.class};
+  
+  public static final Class[] ACTION_ARGS = {};
+  public static final Class[] ACTION_LISTENER_ARGS = {ActionEvent.class};
+  public static final Class[] VALUE_CHANGE_LISTENER_ARGS = {ValueChangeEvent.class};
+  public static final Class[] VALIDATOR_ARGS = {FacesContext.class, UIComponent.class, Object.class};
 
   private ComponentUtil() {
   }