you can sue that notation anywhere. A tip that will save you a lot of
time, always wrap the OGNl expressions with %{}, that's why the first
hidden is not getting evaluated. The second one has an empty value
because "goalToAchieve" is probably not pointing to anything.

btw what #attr does is search for a value in all scopes (page,
request, session , application)

musahcy

On Mon, Jul 13, 2009 at 5:57 PM, Dimitrios
Christodoulakis<dimi....@gmail.com> wrote:
> Thanks again for helping out Musachy,
> I was wondering if there are any rules regarding when the notation you
> suggested below can be used. it works perfectly for setting url
> params.
>
> I was trying to use it (with struts2 tags) within a form (which is
> within the display:column tag) to pass the value to an action:
>
> <display:column>
>        <s:form action="UpdateEntryForm">
>        <s:hidden name="mark" value="#attr.thisEntry.mark" />
>        <s:hiddenname="name" value="%{goalToAchieve.name}" />
>        <s:submit value="Edit"/>
>        </s:form>
> </display:column>
>
> This creates an "Edit" button in each row for every object I iterate
> over, and I hoped to use the s:hidden tag to populate the underlying
> UpdateEntryForm action. I also try to test it by printing from the
> execute method as listed below, but the console output is just the
> literal for the mark and zero for the primitive:
>
> This id is: 0
> This name is: #attr.thisEntry.mark
>
> My action class:
>
> public class UpdateEntryForm extends ActionSupport{
> public String execute(){
>                System.out.println("This id is: "+ getId());
>                System.out.println("This name is: "+ getMark());
>                return SUCCESS;
>        }
> private String name;
> private long mark;
> public String getName() {
>                return name;
>        }
>        public void setName(String name){
>                this.name = name;
>        }
>
>        public String getMark() {
>                return mark;
>        }
>        public void setMark(String mark){
>                this.mark = mark;
>        }
> }
>
> Is there something wrong with the code above? Thanks again!
>
> On Mon, Jul 13, 2009 at 2:03 PM, Musachy Barroso<musa...@gmail.com> wrote:
>> The current row used by displaytag is pushed under the name set in
>> uid, so you could do this:
>>
>> <display:table name="goalToAchieve.entries" requestURI="" uid="thisGoal">
>> <display:column>
>> <a href="<s:url action='DeleteEntryForm' escapeAmp="false">
>> <s:param name="date" value="#attr.thisGoal.mark" />
>>  </s:url>
>> ">Remove</a>
>> </display:column>
>>
>> musachy
>>
>> On Mon, Jul 13, 2009 at 11:17 AM, Dimitrios
>> Christodoulakis<dimi....@gmail.com> wrote:
>>> Thanks. So, if I wanted to access a particular property (say this
>>> property is called mark) of an "entry" object which I am iterating
>>> over, I would do something like the following:
>>>
>>> <display:table name="goalToAchieve.entries" requestURI="" uid="thisGoal">
>>> <display:column property="entry" />
>>> <display:column property="date" sortable="true"
>>> defaultorder="ascending" title="TimeStamp"/>
>>> <display:column property="mark" />
>>> <display:column>
>>> <a href="<s:url action='DeleteEntryForm' escapeAmp="false">
>>> <s:param name="name" value="%{goalToAchieve.owner.fullName}" />
>>> <s:param name="id" value="%{goalToAchieve.id}" />
>>> <s:param name="date" value="#attr.entry.mark" />
>>>   </s:url>
>>> ">Remove</a>
>>> </display:column>
>>>
>>> So, I could pass mark as a url param via s:url within the display tag?
>>>
>>> Thanks for the information!
>>>
>>> On Mon, Jul 13, 2009 at 1:08 PM, Musachy Barroso<musa...@gmail.com> wrote:
>>>> Assuming that each entry is named "entry" by displayTag, you can
>>>> access it using "#attr.entry" (or "#attr['entry']")  to access it from
>>>> the S2 tags.
>>>>
>>>> musachy
>>>>
>>>> On Mon, Jul 13, 2009 at 10:27 AM, Dimitrios
>>>> Christodoulakis<dimi....@gmail.com> wrote:
>>>>> Yes, that is exactly the case, hmm.. Although, how is the
>>>>> display:table tag finds the collection in the first place?
>>>>>
>>>>> Supposedly the display has some way of reaching the valuestack, it can
>>>>> even resolve the deeper notation <display:table
>>>>> name="goalToAchieve.entries"
>>>>>
>>>>> However, I will switch back to s:iterator to test if the syntax
>>>>> suggested will work. I mainly used the display tag as a quick way to
>>>>> sort the collection, but if I can't access the properties of the
>>>>> objects I am iterating over, it isn't of much use in this case
>>>>>
>>>>> On Mon, Jul 13, 2009 at 12:20 PM, Greg Lindholm<greg.lindh...@gmail.com> 
>>>>> wrote:
>>>>>> OK, I see the problem now...  you are not using <s:iterator> to go thru 
>>>>>> the
>>>>>> entries, you are using <display:table>.
>>>>>>
>>>>>> The syntax suggested will not work since <display:table> does not know
>>>>>> anything about the value stack.The <s:param name="mark" value="%{mark}" 
>>>>>> />
>>>>>> uses the value stack to resolve 'mark' which will not work here, you will
>>>>>> need to replace %{mark} with the right syntax to work with 
>>>>>> <display:table>
>>>>>> iterator.
>>>>>>
>>>>>> And I don't know anything about <display:table> so you will need to look 
>>>>>> up
>>>>>> how to access the properties of the entities you are iterating over so 
>>>>>> as to
>>>>>> build the URL.
>>>>>>
>>>>>>
>>>>>> On Mon, Jul 13, 2009 at 12:28 PM, Dimitrios Christodoulakis <
>>>>>> dimi....@gmail.com> wrote:
>>>>>>
>>>>>>> I made the changes, but the view source indicates that the param
>>>>>>> "mark" is not passed.
>>>>>>>
>>>>>>> The url linked is formed like this:
>>>>>>>
>>>>>>> /secure/DeleteEntryForm.action?name=firstName+lastName&id=1
>>>>>>>
>>>>>>> The name and id params are fields of the parent object, the one
>>>>>>> containing the collection.
>>>>>>>
>>>>>>> Actually, I tried with all fields taken from the collection object,
>>>>>>> like entry, and date but none gets passed as a param. Only properties
>>>>>>> exposed by the parent object, goalToAchieve are passed, shouldn't I be
>>>>>>> able to point to a field within a collection object too?
>>>>>>>
>>>>>>> It looks like individual collection object properties can be viewed
>>>>>>> using the iterator/display, but cannot be "captured" or passed as
>>>>>>> parameters for any other uses... unless I am missing something, or
>>>>>>> doing something wrong.
>>>>>>>
>>>>>>>
>>>>>>> On Mon, Jul 13, 2009 at 10:50 AM, Greg Lindholm<greg.lindh...@gmail.com>
>>>>>>> wrote:
>>>>>>> > Looks like you need to change entry.mark to just mark and remove the
>>>>>>> > <s:property value="%{entry}"/>. Also you probably don't need to pass 
>>>>>>> > both
>>>>>>> > the name and id of the parent object.
>>>>>>> >
>>>>>>> > <a href="<s:url action='DeleteEntryForm' var="entry" 
>>>>>>> > escapeAmp="false">
>>>>>>> >       <s:param name="id" value="%{goalToAchieve.id}" />
>>>>>>> >       <s:param name="mark" value="%{mark}" />
>>>>>>> >   </s:url>
>>>>>>> > ">Remove</a>
>>>>>>> >
>>>>>>> >
>>>>>>> > On Mon, Jul 13, 2009 at 10:48 AM, Dimitrios Christodoulakis <
>>>>>>> > dimi....@gmail.com> wrote:
>>>>>>> >
>>>>>>> >> Thanks for letting me know. Alright, so:
>>>>>>> >>
>>>>>>> >> This is the parent class:
>>>>>>> >>
>>>>>>> >> @Entity
>>>>>>> >> public class GoalToAchieve {
>>>>>>> >> @Id @GeneratedValue
>>>>>>> >> private Long id;
>>>>>>> >>
>>>>>>> >> @org.hibernate.annotations.CollectionOfElements
>>>>>>> >> @JoinTable (name="GoalToAchieve_entry",
>>>>>>> >> joincolum...@joincolumn(name="goalToAchieve_id"))
>>>>>>> >> private Set<JournalEntry> entries = new HashSet<JournalEntry>();
>>>>>>> >>
>>>>>>> >>        public Set<JournalEntry> getEntries() {
>>>>>>> >>                return entries;
>>>>>>> >>        }
>>>>>>> >>        public void setEntries(SortedSet<JournalEntry> entries) {
>>>>>>> >>                this.entries = entries;
>>>>>>> >>        }
>>>>>>> >>
>>>>>>> >>        public void addEntry(JournalEntry newEntry){
>>>>>>> >>                entries.add(newEntry);
>>>>>>> >>        }
>>>>>>> >>
>>>>>>> >>        public void deleteEntry(JournalEntry entry){
>>>>>>> >>                entries.remove(entry);
>>>>>>> >>        }
>>>>>>> >> ..plus some other standard fields with getters and setters
>>>>>>> >>
>>>>>>> >> This is the child-class:
>>>>>>> >>
>>>>>>> >> @Embeddable
>>>>>>> >> public class JournalEntry {
>>>>>>> >> @org.hibernate.annotations.Parent
>>>>>>> >> private GoalToAchieve goalToAchieve;
>>>>>>> >>
>>>>>>> >> @Column
>>>>>>> >> private Long mark;
>>>>>>> >> public Long getMark() {
>>>>>>> >>        return mark;
>>>>>>> >> }
>>>>>>> >> public void setMark(long mark){
>>>>>>> >>        this.mark = mark;
>>>>>>> >>         }
>>>>>>> >>
>>>>>>> >> @Column(length = 255, nullable = false)
>>>>>>> >> private String entry;
>>>>>>> >>
>>>>>>> >> @Temporal(TemporalType.TIMESTAMP)
>>>>>>> >> @Column(nullable = false, updatable = false)
>>>>>>> >> private Date insertDate = new Date();
>>>>>>> >>
>>>>>>> >> ..plus the rest getters and setters
>>>>>>> >>
>>>>>>> >> And this this the jsp part where I display the collection:
>>>>>>> >>
>>>>>>> >> <s:if test="goalToAchieve.entries.size > 0">
>>>>>>> >> <display:table name="goalToAchieve.entries" requestURI=""
>>>>>>> uid="thisGoal">
>>>>>>> >>        <display:column property="entry" />
>>>>>>> >>        <display:column property="date" sortable="true"
>>>>>>> >> defaultorder="ascending" title="TimeStamp"/>
>>>>>>> >>        <display:column property="mark" />
>>>>>>> >>  <display:column>
>>>>>>> >> <a href="<s:url action='UpdateEntryForm'>
>>>>>>> >>        <s:param name="name" value="%{goalToAchieve.owner.fullName}" 
>>>>>>> >> />
>>>>>>> >>        <s:param name="mark" value="#mark" />
>>>>>>> >>    </s:url>
>>>>>>> >>    ">Edit</a>
>>>>>>> >> </display:column>
>>>>>>> >> <display:column>
>>>>>>> >> <a href="<s:url action='DeleteEntryForm' var="entry" 
>>>>>>> >> escapeAmp="false">
>>>>>>> >>         <s:param name="name" value="%{goalToAchieve.owner.fullName}" 
>>>>>>> >> />
>>>>>>> >>         <s:param name="id" value="%{goalToAchieve.id}" />
>>>>>>> >>        <s:param name="mark" value="entry.mark" />
>>>>>>> >>        <s:property value="%{entry}"/>
>>>>>>> >>    </s:url>
>>>>>>> >> ">Remove</a>
>>>>>>> >> </display:column>
>>>>>>> >> </display:table>
>>>>>>> >> </s:if>
>>>>>>> >>
>>>>>>> >> ..and the delete action, which should take an entry reference and
>>>>>>> >> remove it from the collections looks like this:
>>>>>>> >>
>>>>>>> >> public class DeleteEntry extends ActionSupport{
>>>>>>> >> public String execute(){
>>>>>>> >>                goalToAchieve.deleteEntry(entry);
>>>>>>> >>
>>>>>>> >>                return SUCCESS;
>>>>>>> >>        }
>>>>>>> >>
>>>>>>> >>        private JournalEntry entry;
>>>>>>> >>        private GoalToAchieve goalToAchieve;
>>>>>>> >>        private long id;
>>>>>>> >>
>>>>>>> >> ... + getters and setters
>>>>>>> >>
>>>>>>> >> I guess right now, my problem has become how to pass a parameter
>>>>>>> >> referring to en entry (the mark field) to the delete action. Next, I
>>>>>>> >> would do a lookup within the action to find the entry object and
>>>>>>> >> remove it from the parent object collection, by calling
>>>>>>> >> deleteEntry(JournalEntry entry)
>>>>>>> >>
>>>>>>> >> On Mon, Jul 13, 2009 at 9:16 AM, Greg 
>>>>>>> >> Lindholm<greg.lindh...@gmail.com>
>>>>>>> >> wrote:
>>>>>>> >> > You are not providing enough information for anyone to help you. 
>>>>>>> >> > Since
>>>>>>> >> you
>>>>>>> >> > have changed your object and the jsp you had better include them 
>>>>>>> >> > with
>>>>>>> any
>>>>>>> >> > request.
>>>>>>> >> >
>>>>>>> >> >
>>>>>>> >> > On Mon, Jul 13, 2009 at 9:51 AM, Dimitrios Christodoulakis <
>>>>>>> >> > dimi....@gmail.com> wrote:
>>>>>>> >> >
>>>>>>> >> >> Yes, that is a great suggestion actually. What I did was to add a 
>>>>>>> >> >> new
>>>>>>> >> >> field based
>>>>>>> >> >> System.currentTimeMillis(), but the problem is adding it as a url
>>>>>>> >> >> parameter.
>>>>>>> >> >>
>>>>>>> >> >> For example, I am trying to add it as a url parameter below:
>>>>>>> >> >>
>>>>>>> >> >> <a href="<s:url action='UpdateEntryForm'>
>>>>>>> >> >> <s:param name="name" value="%{goalToAchieve.owner.fullName}" />
>>>>>>> >> >> <s:param name="mark" value="%{mark}" />
>>>>>>> >> >> </s:url>
>>>>>>> >> >>  ">Edit</a>
>>>>>>> >> >>
>>>>>>> >> >> But, the only param passed is the fullName. The mark is not added 
>>>>>>> >> >> to
>>>>>>> >> >> the url string. I think this is because the only object available 
>>>>>>> >> >> on
>>>>>>> >> >> the valuestack is goalToAchieve, and using deeper notation I can
>>>>>>> >> >> reference as deep as the "entries" collection. But not to fields 
>>>>>>> >> >> of
>>>>>>> >> >> each entry object. In other words, the display or iterator help me
>>>>>>> >> >> view the collection objects, but not extract and use any of their
>>>>>>> >> >> fields... I am not sure why this is happening, or if I am doing
>>>>>>> >> >> something wrong.
>>>>>>> >> >>
>>>>>>> >> >
>>>>>>> >>
>>>>>>> >> ---------------------------------------------------------------------
>>>>>>> >> 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
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>>>>> For additional commands, e-mail: user-h...@struts.apache.org
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>>>
>>>> ---------------------------------------------------------------------
>>>> 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
>>>
>>>
>>
>>
>>
>> --
>> "Hey you! Would you help me to carry the stone?" Pink Floyd
>>
>> ---------------------------------------------------------------------
>> 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
>
>



-- 
"Hey you! Would you help me to carry the stone?" Pink Floyd

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org

Reply via email to