On 24 Sep 2002, Craig Longman wrote: > what i want to do is this: > > <c:if test"${not empty param.typeID}"> > <c:set var="${param.parent_objectName}_typeID" value="${param.typeID}"/> > </c:if> > > then later: > > <c:out value="${${parent_objectName}_typeID}"/> > > this would store an attribute named either Product_typeID or > Service_typeID that could then be used elsewhere in the page. > > unfortunately, the problems are plenty. it seems c:set.var isn't EL > enabled (there is nothing set by the name of Service_typeID for > example) and one can't 'double evaluate' in the c:out.value attribute. > > the only way i can see of doing this now, is to create a custom tag > that performs the magic, which might make sense for me in this case > anyway, but i'd thought i'd throw this into the pit to be picked > apart.
You don't have to go that far. Indeed, you can't use dynamic values with 'var', and you can't begin a subordinate expression within a top-level expression. However, using collections, it should be straightforward to do what you want: <%-- Set up a Map. Of course, a back-end servlet could do this too. --%> <jsp:useBean id="types" class="java.util.Map" /> <c:if test="${not empty param.typeID}"> <c:set target="${types}" property="${param.parent_objectName}_typeID" value="${param.typeID}" /> </c:if> This saves information, which you can later retrieve with <c:set var="propertyName" value="${param.parent_objectName}_typeID" /> <c:out value="${types[propertyName}" /> Note the <c:set>, which lets us build up a complex temporary key into 'types'; you can't concatenate strings in the JSTL EL, so the concatenation must occur outside an expression -- in this case, in the attribute value of <c:set>. Hope that helps, -- Shawn Bayern "JSTL in Action" http://www.jstlbook.com -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>