You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-user@incubator.apache.org by Chris Hansen <ch...@overstock.com> on 2006/12/22 20:34:49 UTC

Action attribute of tr:commandNavigationItem ignored

In the following code for a navigation menu, everything works except the
action attribute of the tr:commandNavigationItem tag:

<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"
xmlns:tr="http://myfaces.apache.org/trinidad">
  <tr:form>
    <tr:navigationPane var="menuItem" value="#{menuModel.model}"
hint="list"
      inlineStyle="margin-left:-20px;margin-top:-15px;">
      <!-- For some reason text will not be displayed if there is not
another element in the tr:navigationPane besides the nodeStamp facet-->
      <tr:group></tr:group>
      <f:facet name="nodeStamp">
        <tr:commandNavigationItem action="#{menuItem.action}"

disabled="#{menuItem.disabled}" text="#{menuItem.label}"

destination="#{menuItem.destination}" rendered="#{menuItem.shown}"

selected="#{menuItem.viewId == view.viewId}" immediate="true" />
      </f:facet>
    </tr:navigationPane>
  </tr:form>
</ui:composition>



The getter for menuItem.action is never called, while all of the other
getters are being called (menuItem.destination, menuItem.label, etc.). I
tried removing the destination=... attribute with no success.

What is the key to using an action on a commandNavigationItem, and what am I
missing?

Thanks.
-- 
Chris Hansen
Overstock.com
Internal Applications
6350 South 3000 East
Salt Lake City, Utah 84121
Toll Free: 800.The.Big.O (843-2446)
www.overstock.com


Re: Action attribute of tr:commandNavigationItem ignored

Posted by Chris Hansen <ch...@overstock.com>.
I tried that as well. The method "public String action()" in menuItem was
never called when I used it a tr:commandNavigationItem tag as specified in a
previous message. I even tried removing destination=... in combination.

Any ideas? Thank you for your help.
-- 
Chris Hansen
Overstock.com
Internal Applications
6350 South 3000 East
Salt Lake City, Utah 84121
Toll Free: 800.The.Big.O (843-2446)
www.overstock.com



On 12/26/06 10:43 AM, "Adam Winer" <aw...@gmail.com> wrote:

> You cannot use a getter for "action".  That isn't how it works.
> The method *is* the action.  You cannot do:
> 
>   public MethodBinding getAction()
> 
> ... you must do:
> 
>   public String action()
> 
> ... which could be implemented along the lines of:
> 
>   public String action()
>   {
>     MethodBinding action = getAction();
>     if (action == null) return null;
> 
>     FacesContext context = FacesContext.getCurrentInstance();
>     Object retVal = action.invoke(context, null);
>     if (retVal == null)
>       return null;
>     return retVal.toString();
>   }
> 
> -- Adam
> 
> 
> On 12/26/06, Chris Hansen <ch...@overstock.com> wrote:
>> I should have specified, but the getter for menuItem.action returns a
>> javax.faces.el.MethodBinding . Are you saying that no action can be bound to
>> a getter that returns a MethodBinding?
>> 
>> --
>> Chris Hansen
>> Overstock.com
>> Internal Applications
>> 6350 South 3000 East
>> Salt Lake City, Utah 84121
>> Toll Free: 800.The.Big.O (843-2446)
>> www.overstock.com
>> 
>> 
>> On 12/22/06 6:22 PM, "Adam Winer" <aw...@gmail.com> wrote:
>> 
>>> Chris,
>>> 
>>> "action" is not going to go to a bean getter.  It's going
>>> to go to action method, e.g.:
>>> 
>>>   action="#{item.action}"
>>> 
>>> means you must have:
>>> 
>>>   public String action()
>>> 
>>> on your bean.  This is just like all other "action"
>>> attributes in JSF.
>>> 
>>> -- Adam
>>> 
>>> 
>>> On 12/22/06, Chris Hansen <ch...@overstock.com> wrote:
>>>> In the following code for a navigation menu, everything works except the
>>>> action attribute of the tr:commandNavigationItem tag:
>>>> 
>>>> <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
>>>> xmlns:h="http://java.sun.com/jsf/html"
>>>> 
>>>> xmlns:f="http://java.sun.com/jsf/core"
>>>> xmlns:tr="http://myfaces.apache.org/trinidad">
>>>>   <tr:form>
>>>>     <tr:navigationPane var="menuItem" value="#{menuModel.model}"
>>>> hint="list"
>>>>       inlineStyle="margin-left:-20px;margin-top:-15px;">
>>>>       <!-- For some reason text will not be displayed if there is not
>>>> another element in the tr:navigationPane besides the nodeStamp facet-->
>>>>       <tr:group></tr:group>
>>>>       <f:facet name="nodeStamp">
>>>>         <tr:commandNavigationItem action="#{menuItem.action}"
>>>> 
>>>> disabled="#{menuItem.disabled}" text="#{menuItem.label}"
>>>> 
>>>> destination="#{menuItem.destination}" rendered="#{menuItem.shown}"
>>>> 
>>>> selected="#{menuItem.viewId == view.viewId}" immediate="true" />
>>>>       </f:facet>
>>>>     </tr:navigationPane>
>>>>   </tr:form>
>>>> </ui:composition>
>>>> 
>>>> 
>>>> 
>>>> The getter for menuItem.action is never called, while all of the other
>>>> getters are being called (menuItem.destination, menuItem.label, etc.). I
>>>> tried removing the destination=... attribute with no success.
>>>> 
>>>> What is the key to using an action on a commandNavigationItem, and what am
>>>> I
>>>> missing?
>>>> 
>>>> Thanks.
>>>> --
>>>> Chris Hansen
>>>> Overstock.com
>>>> Internal Applications
>>>> 6350 South 3000 East
>>>> Salt Lake City, Utah 84121
>>>> Toll Free: 800.The.Big.O (843-2446)
>>>> www.overstock.com
>>>> 
>>>> 
>> 
>> 


Re: Action attribute of tr:commandNavigationItem ignored

Posted by Adam Winer <aw...@gmail.com>.
You cannot use a getter for "action".  That isn't how it works.
The method *is* the action.  You cannot do:

  public MethodBinding getAction()

... you must do:

  public String action()

... which could be implemented along the lines of:

  public String action()
  {
    MethodBinding action = getAction();
    if (action == null) return null;

    FacesContext context = FacesContext.getCurrentInstance();
    Object retVal = action.invoke(context, null);
    if (retVal == null)
      return null;
    return retVal.toString();
  }

-- Adam


On 12/26/06, Chris Hansen <ch...@overstock.com> wrote:
> I should have specified, but the getter for menuItem.action returns a
> javax.faces.el.MethodBinding . Are you saying that no action can be bound to
> a getter that returns a MethodBinding?
>
> --
> Chris Hansen
> Overstock.com
> Internal Applications
> 6350 South 3000 East
> Salt Lake City, Utah 84121
> Toll Free: 800.The.Big.O (843-2446)
> www.overstock.com
>
>
> On 12/22/06 6:22 PM, "Adam Winer" <aw...@gmail.com> wrote:
>
> > Chris,
> >
> > "action" is not going to go to a bean getter.  It's going
> > to go to action method, e.g.:
> >
> >   action="#{item.action}"
> >
> > means you must have:
> >
> >   public String action()
> >
> > on your bean.  This is just like all other "action"
> > attributes in JSF.
> >
> > -- Adam
> >
> >
> > On 12/22/06, Chris Hansen <ch...@overstock.com> wrote:
> >> In the following code for a navigation menu, everything works except the
> >> action attribute of the tr:commandNavigationItem tag:
> >>
> >> <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
> >> xmlns:h="http://java.sun.com/jsf/html"
> >>
> >> xmlns:f="http://java.sun.com/jsf/core"
> >> xmlns:tr="http://myfaces.apache.org/trinidad">
> >>   <tr:form>
> >>     <tr:navigationPane var="menuItem" value="#{menuModel.model}"
> >> hint="list"
> >>       inlineStyle="margin-left:-20px;margin-top:-15px;">
> >>       <!-- For some reason text will not be displayed if there is not
> >> another element in the tr:navigationPane besides the nodeStamp facet-->
> >>       <tr:group></tr:group>
> >>       <f:facet name="nodeStamp">
> >>         <tr:commandNavigationItem action="#{menuItem.action}"
> >>
> >> disabled="#{menuItem.disabled}" text="#{menuItem.label}"
> >>
> >> destination="#{menuItem.destination}" rendered="#{menuItem.shown}"
> >>
> >> selected="#{menuItem.viewId == view.viewId}" immediate="true" />
> >>       </f:facet>
> >>     </tr:navigationPane>
> >>   </tr:form>
> >> </ui:composition>
> >>
> >>
> >>
> >> The getter for menuItem.action is never called, while all of the other
> >> getters are being called (menuItem.destination, menuItem.label, etc.). I
> >> tried removing the destination=... attribute with no success.
> >>
> >> What is the key to using an action on a commandNavigationItem, and what am I
> >> missing?
> >>
> >> Thanks.
> >> --
> >> Chris Hansen
> >> Overstock.com
> >> Internal Applications
> >> 6350 South 3000 East
> >> Salt Lake City, Utah 84121
> >> Toll Free: 800.The.Big.O (843-2446)
> >> www.overstock.com
> >>
> >>
>
>

Re: Action attribute of tr:commandNavigationItem ignored

Posted by Chris Hansen <ch...@overstock.com>.
I should have specified, but the getter for menuItem.action returns a
javax.faces.el.MethodBinding . Are you saying that no action can be bound to
a getter that returns a MethodBinding?

-- 
Chris Hansen
Overstock.com
Internal Applications
6350 South 3000 East
Salt Lake City, Utah 84121
Toll Free: 800.The.Big.O (843-2446)
www.overstock.com


On 12/22/06 6:22 PM, "Adam Winer" <aw...@gmail.com> wrote:

> Chris,
> 
> "action" is not going to go to a bean getter.  It's going
> to go to action method, e.g.:
> 
>   action="#{item.action}"
> 
> means you must have:
> 
>   public String action()
> 
> on your bean.  This is just like all other "action"
> attributes in JSF.
> 
> -- Adam
> 
> 
> On 12/22/06, Chris Hansen <ch...@overstock.com> wrote:
>> In the following code for a navigation menu, everything works except the
>> action attribute of the tr:commandNavigationItem tag:
>> 
>> <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
>> xmlns:h="http://java.sun.com/jsf/html"
>> 
>> xmlns:f="http://java.sun.com/jsf/core"
>> xmlns:tr="http://myfaces.apache.org/trinidad">
>>   <tr:form>
>>     <tr:navigationPane var="menuItem" value="#{menuModel.model}"
>> hint="list"
>>       inlineStyle="margin-left:-20px;margin-top:-15px;">
>>       <!-- For some reason text will not be displayed if there is not
>> another element in the tr:navigationPane besides the nodeStamp facet-->
>>       <tr:group></tr:group>
>>       <f:facet name="nodeStamp">
>>         <tr:commandNavigationItem action="#{menuItem.action}"
>> 
>> disabled="#{menuItem.disabled}" text="#{menuItem.label}"
>> 
>> destination="#{menuItem.destination}" rendered="#{menuItem.shown}"
>> 
>> selected="#{menuItem.viewId == view.viewId}" immediate="true" />
>>       </f:facet>
>>     </tr:navigationPane>
>>   </tr:form>
>> </ui:composition>
>> 
>> 
>> 
>> The getter for menuItem.action is never called, while all of the other
>> getters are being called (menuItem.destination, menuItem.label, etc.). I
>> tried removing the destination=... attribute with no success.
>> 
>> What is the key to using an action on a commandNavigationItem, and what am I
>> missing?
>> 
>> Thanks.
>> --
>> Chris Hansen
>> Overstock.com
>> Internal Applications
>> 6350 South 3000 East
>> Salt Lake City, Utah 84121
>> Toll Free: 800.The.Big.O (843-2446)
>> www.overstock.com
>> 
>> 


Re: Action attribute of tr:commandNavigationItem ignored

Posted by Adam Winer <aw...@gmail.com>.
Chris,

"action" is not going to go to a bean getter.  It's going
to go to action method, e.g.:

  action="#{item.action}"

means you must have:

  public String action()

on your bean.  This is just like all other "action"
attributes in JSF.

-- Adam


On 12/22/06, Chris Hansen <ch...@overstock.com> wrote:
> In the following code for a navigation menu, everything works except the
> action attribute of the tr:commandNavigationItem tag:
>
> <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
> xmlns:h="http://java.sun.com/jsf/html"
>
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:tr="http://myfaces.apache.org/trinidad">
>   <tr:form>
>     <tr:navigationPane var="menuItem" value="#{menuModel.model}"
> hint="list"
>       inlineStyle="margin-left:-20px;margin-top:-15px;">
>       <!-- For some reason text will not be displayed if there is not
> another element in the tr:navigationPane besides the nodeStamp facet-->
>       <tr:group></tr:group>
>       <f:facet name="nodeStamp">
>         <tr:commandNavigationItem action="#{menuItem.action}"
>
> disabled="#{menuItem.disabled}" text="#{menuItem.label}"
>
> destination="#{menuItem.destination}" rendered="#{menuItem.shown}"
>
> selected="#{menuItem.viewId == view.viewId}" immediate="true" />
>       </f:facet>
>     </tr:navigationPane>
>   </tr:form>
> </ui:composition>
>
>
>
> The getter for menuItem.action is never called, while all of the other
> getters are being called (menuItem.destination, menuItem.label, etc.). I
> tried removing the destination=... attribute with no success.
>
> What is the key to using an action on a commandNavigationItem, and what am I
> missing?
>
> Thanks.
> --
> Chris Hansen
> Overstock.com
> Internal Applications
> 6350 South 3000 East
> Salt Lake City, Utah 84121
> Toll Free: 800.The.Big.O (843-2446)
> www.overstock.com
>
>