Just something I use...

Rather than 

<option value="A"<c:if test="${item.code == 'A'}">
selected</c:if>>A</option>

I tend to use EL for the conditional to determine the selected item with 

<option value="A" ${item.code eq "A" ? " selected " : ""}>A</option> 

This way the < > 's all match up so if you're using any html designer it
wont be effected.



-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Rick
Herrick
Sent: Monday, October 02, 2006 9:00 PM
To: displaytag-user@lists.sourceforge.net
Subject: Re: [displaytag-user] Dropdown selection - displaytag 1.0

Rick Herrick wrote:
> Reg Sherwood wrote:
>> I'm faced with an interesting problem - I am using displaytag 1.0 
>> (non
>> el) combined with struts 1.2.9.  I have a table with a number of 
>> columns and rows; all columns are static display data except for the 
>> last which is a dropdown box where the user can modify a value 
>> associated to the given row (think of it as a status column).  What I 
>> want to know is if its possible on form submission to somehow figure 
>> for each row in the displaytag the currently selected value of the 
>> dropdown.  Anyone have suggestions?  All are welcomed.
>
> I do.  I'll post it up later.
>
> This is YAF (yet another FAQ :).

OK, apologies for the delay.  On top of a sick daughter, a wife leaving town
on a business trip, and a catastrophic hard drive failure... I've been kinda
busy lately!

So I'm gonna write up the Fred Flintstone method for handling drop-down
lists in forms with displaytag.  I'll give you some pointers later on how to
do this more elegantly.  Also, I'm writing this using Java 5/JSP 2.4 in-line
EL.  For older set-ups (JSP 2.3 and earlier) you'll have to use JSTL tags.
This is a silly example, with a person's name and the ability to set a code
for the person.

First, set up a form with the displaytag table inside it:

<form action="xxx">
   <display:table name="items" uid="item">
      <display:column property="name"/>
      <display:column title="Code">
         <select name="code_${item.id}">
            <option value="A"<c:if test="${item.code == 'A'}">
selected</c:if>>A</option>
            <option value="B"<c:if test="${item.code == 'B'}">
selected</c:if>>B</option>
            <option value="C"<c:if test="${item.code == 'C'}">
selected</c:if>>C</option>
         </select>
   </display:table>
   <input type="submit"
</form>

So what will happen with this is that the list will be iterated, the name
will be displayed, and for each item the code_XXXX drop-down list will be
created.  The <c:if>s inside the option list will check each user to see
what code is set for the user and add "selected" to the appropriate option
in the list.

Processing this as it's reposted is simply a matter of find all request
parameters that begin with "code_".  Grab those, lop off the "code_" and
that'll give you the item ID to which that selection applies.  Get the value
of the list and set the code property on that item to whatever value you
got.

Like I said, this is the Fred Flintstone way of dealing with it.  You're out
there munging strings together and parsing them out and it's fairly ugly.
There are many ways to streamline this:

* Take the options in your drop-down list from an enum or string array. 
You can then just do a <c:iterate> on that enum or array and collapse the
code for the drop-down list.  This is especially useful when you might have
a pretty large number of items in that list.

* Use the BeanUtils library!  This is a big one, although it can be kinda
hard to figure out.  Basically instead of doing "code_XXXX" and having to
parse the request parameter names, you do something like "code[XXXX]" and
objects will get magically referenced properly.  Somewhere I have a nice
sandbox app that illustrates this, but I couldn't find it over the weekend
(catastrophic hard drive failure, remember? :^( ).

Drop a line to the list if you have any questions!

--
Rick Herrick
[EMAIL PROTECTED]

Proud member of the reality-based community

Never try to discourage thinking for you are sure to succeed.--Bertrand
Russell

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's
Techsay panel and you'll get the chance to share your opinions on IT &
business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
displaytag-user mailing list
displaytag-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/displaytag-user

--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.407 / Virus Database: 268.12.11/460 - Release Date: 01/10/2006
 

-- 
No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.1.407 / Virus Database: 268.12.11/460 - Release Date: 01/10/2006
 


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
displaytag-user mailing list
displaytag-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/displaytag-user

Reply via email to