Yes, this all works now!  Thanks so much to Pawel, Wes, Tom for helping a 
newbie like me.  I hope not to be a newbie for too much longer!

--Dennis





________________________________
From: Thomas Sattler <tomsatt...@gmail.com>
To: Struts Users Mailing List <user@struts.apache.org>
Sent: Wednesday, September 23, 2009 8:01:22 PM
Subject: Re: Question about 'if' tag

I think Pawel omitted something in the original reply.

You can't say:
<s:if test="user.canEditCustomer(iter)">

That won't work.

Instead, you have to say:

<s:if test="user.canEditCustomer(#attr.iter)">




2009/9/23 Paweł Wielgus <poulw...@gmail.com>

> Hi again,
> firstly You should read about OGNL basics because You are using it,
> then if You write <s:if test="canEditCustomer"> it works, why?,
> because struts is treating it like a regular getter,
> so it adds get and makes can to camel case Can and in result it
> searches for getCanEditCustomer() method, and it finds it in action.
> It is a general shortcut for dealing with fields which has getters and
> setters.
>
> Now when You write <s:if test="canEditCustomer()"> struts sees this ()
> at the end and it searches for canEditCustomer() method and of course
> it's not finding it anywhere.
>
> And last the method should be isCanEditCustomer(), but that is just my
> habbit.
>
> Also keep in mind what Wes was writing about, hidding a link is not
> suficient.
>
> Best greetings,
> Paweł Wielgus.
>
> 2009/9/23 Dennis Atkinson <dennisatkinson...@yahoo.com>:
> > I have gone through Pawel's example and it is not working for me.
> >
> > Here is the iterator:
> >
> >         <s:iterator value="allCustomers" id="iter" status="table_stat">
> >
> > I created three methods in my action class:
> >
> > public boolean getCanEditCustomer()
> > {
> >    return false ;
> > }
> >
> > public boolean getCanEditCustomer(Integer anInt)
> > {
> >    return false ;
> > }
> >
> > public boolean getCanEditCustomer(Customer aCustomer)
> > {
> >    return false ;
> > }
> >
> > These are dummy methods just to see if everything will work.  I set an
> Eclipse breakpoint on each return statement.  So in theory, Eclipse should
> stop on one of the statements whether I pass in nothing, an integer, or a
> Customer object.
> >
> > The results are:
> >
> > <s:if test="canEditCustomer">              (This stops in the first
> method)
> > <s:if test="canEditCustomer()">            (This never stops)
> > <s:if test="canEditCustomer(5)">          (This never stops)
> > <s:if test="canEditCustomer(iter)">       (This never stops)
> >
> > So it seems like no parameters are being passed in; in fact when I use
> the braces to indicate no parameter, that doesn't work either.
> >
> >
> >
> >
> >
> >
> >
> > ________________________________
> > From: Wes Wannemacher <w...@wantii.com>
> > To: Struts Users Mailing List <user@struts.apache.org>
> > Sent: Wednesday, September 23, 2009 4:20:33 PM
> > Subject: Re: Question about 'if' tag
> >
> > In addition to what Pawel is saying, be careful that you also check
> > the 'canEditCustomer(target)' call in the target action since there is
> > nothing to stop someone from figuring out the URL pattern and editing
> > people they weren't intended to edit.
> >
> > -Wes
> >
> > 2009/9/23 Paweł Wielgus <poulw...@gmail.com>:
> >> Hi Dennis,
> >> You are nesting tags, it's not possible/permitted,
> >> what You should do is something like:
> >> <s:iterator value="..." id="iter"> or <s:iterator value="..."
> var="iter">
> >> ....
> >> <s:if test="user.canEditCustomer(iter)">
> >>
> >> Which simply is naming your iterator variable to "iter" and use it in if
> tag,
> >> depending on struts2 version it will be id or var.
> >>
> >> Best greetings,
> >> Paweł Wielgus.
> >>
> >>
> >> 2009/9/23 Dennis Atkinson <dennisatkinson...@yahoo.com>:
> >>> Hi all.
> >>>
> >>> In my Struts2 application, I have a collection of Customer objects, and
> various users have the rights to edit some of them and not others.  I have
> created a Struts iterator tag, and in the iterator, I put the various
> Customer attributes into an HTML table.  All this works.
> >>>
> >>> In one cell of the table, I have the string "Edit", and if it's
> clicked, it goes to another Action class to edit that particular Customer
> object.  All that works too.
> >>>
> >>> What I want to do is only show the "Edit" string if the user has the
> right to edit that Customer.  I'm trying to set a "<s:if" tag to do this,
> but I am sure I'm not doing it right (because it's not working).
> >>>
> >>> I am trying:
> >>>
> >>> <s:if test="%{user.canEditCustomer(<s:property>)}">
> >>>
> >>> hoping "property" is the current object in the iteration.  But whatever
> is happening, this doesn't do what I hope it does.  Am I anywhere close to
> the right solution here?
> >>>
> >>> Thanks,
> >>> Dennis
> >>>
> >>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> >> For additional commands, e-mail: user-h...@struts.apache.org
> >>
> >>
> >
> >
> >
> > --
> > Wes Wannemacher
> >
> > Head Engineer, WanTii, Inc.
> > Need Training? Struts, Spring, Maven, Tomcat...
> > Ask me for a quote!
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> > For additional commands, e-mail: user-h...@struts.apache.org
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
>
>



      

Reply via email to