tomcat-taglibs-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brian McSweeney" <brian.mcswee...@aurium.net>
Subject Re: Populating One <select> Based On The Value In Another
Date Wed, 07 May 2003 10:55:44 GMT
Hi all,
I've been following this thread with interest. I'm trying to do exactly
the same thing. I'm working with struts  and Michael's
suggested solution seems the easiest to me, even though it does
necessitate going back to the server each time.

The basic idea is - submit to an action on change of the select option,
then get the children of the selected option and put them in the next list.

The code for my three lists are below:

  <table border=0 cellpadding=4 cellspacing=1>
    <center>
    <tr>
        <td valign=top>1.</td>
            <br>
            <html:select property="orgId" size=5 width = 250
onchange='document.forms[0].submit()'>
                <html:options collection="orgList" property="value"
labelProperty="longName"/>
            </html:select>
        </td>
        <td valign=top>2.</td>
            <br>
            <html:select property="orgId" size=5 width = 250
onchange='document.forms[1].submit()'>
                <html:options collection="orgList" property="value"
labelProperty="longName"/>
            </html:select>
        </td>
        <td valign=top>3.</td>
            <br>
            <html:select property="orgId" size=5 width = 250
onchange='document.forms[2].submit()'>
                <html:options collection="orgList" property="value"
labelProperty="longName"/>
            </html:select>
        </td>
    </tr>
  </table>

However, my problem is that I'm new to javascipt and I don't know how it
interacts with struts.
So I have  a few questions:

1) Does the onchange method call an inbuild javascript function?

2) How do I link up the document.forms[var].submit( ), to a struts action

3) Is there some way on the action side to tell which form submitted?

I know these are kinda struts related questions, but I thought that I'd keep
it on the
same thread.
thanks very much,
Brian



----- Original Message -----
From: "Michael Duffy" <duffymo@yahoo.com>
To: "Tag Libraries Users List" <taglibs-user@jakarta.apache.org>
Sent: Tuesday, May 06, 2003 6:49 PM
Subject: Re: Populating One <select> Based On The Value In Another


>
> You're correct, of course, James, but I don't want any
> SQL in my jsps.   The whole point of a front
> controller is to get that kind of stuff out of the
> JSPs.
>
> Database access is a back-end process, to be done on
> the server side only IMHO.  JSPs should only be for
> presentation.
>
> BTW, there's a nice Struts-based idea from Larry
> Maturo of Athens Group that might help:
>
>
http://stealthis.athensgroup.com/presentations/Model_Layer_Framework/Struts_
Whitepaper.pdf
>
> It doesn't save a trip to the server, but it does
> accomplish the "populate the second combo box after
> selecting the first" goal.
>
> I'll be refactoring my work to use Struts once I've
> got the whole thing working, so I'll probably take
> advantage of Larry's technique at that time.
>
> Thanks - MOD
>
> --- James Smith <jksmith@email.arizona.edu> wrote:
> > You can't go from JavaScript back to JSTL without
> > another trip to the
> > server; however, you certainly can use JSTL tags to
> > create a map within
> > JavaScript code, something like this:
> >
> > <sql:query var="rs">
> >     select ID, Name from tblSomeTable
> > </sql:query>
> >
> > <script language="javascript">
> >     firstSelectHashMap = new Array();
> >     <c:forEach var="row" items="${rs.rows}">
> >         <sql:query var="rs2">
> >             select ID, Name from tblChildTable where
> > ParentID = ?
> >             <sql:param value="${row.ID}" />
> >         </sql:query>
> >         secondSelectHashMapChoice = new Array();
> >         <c:forEach var="row2" items="${rs2.rows}">
> >             secondSelectHashMapChoice['<c:out
> > value="${row2.ID}" />'] =
> > '<c:out value="${row2.Name}" />';
> >         </c:forEach>
> >         firstSelectHashMap['<c:out value="${row.ID}"
> > />'] = tempChild;
> >     </c:forEach>
> > </script>
> >
> > My JavaScript is a bit rusty but it should look
> > something like that.
> > Anyway, that whole piece of code makes your page a
> > lot larger, and then,
> > when a select occurs, you've got to write the
> > JavaScript to depopulate your
> > second select box and repopulate it with the chosen
> > secondSelectHashMapChoice.  So it's possible to code
> > but it seems fairly
> > nasty.  The second trip to the server is probably
> > much wiser, unless a
> > JavaScript guru out there has a brilliant method,
> > probably involving forcing
> > submits from forms within internal frames hidden by
> > moving them off the page
> > with CSS-P.
> >
> > James Smith
> > Application Systems Analyst, Treistman Center
> > College of Fine Arts, University of Arizona
> >
> > ----- Original Message -----
> > From: "Michael Duffy" <duffymo@yahoo.com>
> > To: "Tag Libraries Users List"
> > <taglibs-user@jakarta.apache.org>
> > Sent: Tuesday, May 06, 2003 9:47 AM
> > Subject: RE: Populating One <select> Based On The
> > Value In Another
> >
> >
> > >
> > > I've got a front controller servlet that takes
> > > requests, executes commands, puts results into the
> > > request, and forwards them onto the next page.
> > The
> > > next page can certainly do this:
> > >
> > > <jsp:useBean id="something"
> > class="java.util.Map"/>
> > >
> > > Now I can access the map by writing:
> > >
> > > "${something['key']}"
> > >
> > > If the Map has String keys and java.util.List
> > values,
> > > I can get the value and stuff it into a JSTL
> > > <c:forEach> tag.
> > >
> > > Actually , I haven't gone to ANY trouble yet
> > because
> > > I've just started on this effort.  ;)  It was just
> > an
> > > idea.  I thought that if there was a way to get
> > the
> > > value out of DHTML and into JSTL that I was
> > ignorant
> > > of I'd be glad to know it.
> > >
> > > But the dearth of information has brought me to
> > the
> > > same conclusion that you're drawing: it's not
> > > possible.  I'll just populate both drop-downs at
> > the
> > > same time.  Thanks. - MOD
> > >
> > >
> > > --- Wendy Smoak <Wendy.Smoak@asu.edu> wrote:
> > > > Michael wrote:
> > > > > Exactly.  It's a choice between doing it on
> > the
> > > > client
> > > > > side or enduring another round-trip to the
> > server.
> > > >  I
> > > > > know how to get it from the server, but I was
> > > > hoping
> > > > > that I could send a java.util.Map down when
> > the
> > > > page
> > > > > is rendered and save myself a trip.
> > > >
> > > > All the Java/JSP/JSTL code executes on the
> > server,
> > > > so I don't see where you
> > > > could "send" a Map down to the client side.
> > Maybe
> > > > an applet?  You could
> > > > surely render the *contents* of the Map into a
> > > > JavaScript data structure.
> > > > (Does JavaScript have a Map structure?) And then
> > use
> > > > client-side JavaScript
> > > > to populate the second drop-down once the user
> > has
> > > > made a selection from the
> > > > first.
> > > >
> > > > > But this is the first time I've had the
> > problem of
> > > > > populating one drop-down using the choice from
> > > > > another.  I know how to get the selection from
> > the
> > > > > first box out of JavaScript.  Getting that
> > value
> > > > into
> > > > > JSTL and the EL is the thing that I'm fuzzy
> > on.
> > > >
> > > > It's one or the other.  Since JavaScript is
> > > > client-side, and JSTL/EL is
> > > > server-side, you can't get the value out of
> > > > JavaScript and into JSTL.  If
> > > > you want to save a trip to the server, then I
> > don't
> > > > believe JSTL will be of
> > > > any help.
> > > >
> > > > How much of a load will this site be under?  Is
> > an
> > > > extra round trip to the
> > > > server really that important?  You may be going
> > to a
> > > > lot of trouble to avoid
> > > > something that isn't really going to be a
> > problem.
> > > >
> > > > --
> > > > Wendy Smoak
> > > > Applications Systems Analyst, Sr.
> > > > Arizona State University PA Information
> > Resources
> > > > Management
> > > >
> > >
> > >
> > > __________________________________
> > > Do you Yahoo!?
> > > The New Yahoo! Search - Faster. Easier. Bingo.
> > > http://search.yahoo.com
> > >
> > >
> >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail:
> > taglibs-user-unsubscribe@jakarta.apache.org
> > > For additional commands, e-mail:
> > taglibs-user-help@jakarta.apache.org
> > >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > taglibs-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail:
> > taglibs-user-help@jakarta.apache.org
> >
>
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Search - Faster. Easier. Bingo.
> http://search.yahoo.com
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: taglibs-user-help@jakarta.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-user-help@jakarta.apache.org


Mime
View raw message