Hey, this worked! Thanks Musachy, the tip you provided solved the problem I was facing for the last 3 days.
I really appreciate your time to post this information. It looks like the display tag packs much more functionality than it seems. 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