From: <[EMAIL PROTECTED]>
We're using Struts and Dynabeans to pass data from DB to the view tier.
What Servlet container and version are you using? (The real question is,
what version of the Servlet specification does it support?) It's becoming
more and more important to state that up front... I don't want to give the
usual
"use JSTL 1.0 and Struts-EL" speech, only to find out that you're on
Tomcat 5.
So my first question is how can I check the value in a Dynabean against
a value in session scope?
Say for example I have the active session ID in a session scoped
variable called sectID and a bean containing the rows from the main query:
<logic:equal name="row" property="sect_id"
value="<% request.getAttribute("sectID") %>">
(which doesn't work, of course).
Well... actually it _would_ if you'd make that:
<logic:equal name="myBean" property="name"
value="<%= request.getAttribute("someName") %>">
(Note the <%= instead of <% in 'value'. )
I wondered about using jstl to do this
and thereby avoiud the scriptlet but it was beyond me how I could get it
to work with the Dynabean.
I don't think JSTL 1.0 and DynaBean will work together:
http://www.mail-archive.com/commons-user@jakarta.apache.org/msg00864.html
That's an old message, but I did a quick test with Tomcat 4.1/BeanUtils 1.6
and was not able to access a LazyDynaBean property with JSTL. So I think it
still holds for that combination.
Take a look at the Struts DynaActionForm classes and see what they did to
fix the problem... there is a 'getMap()' method, so you can get to the
properties with JSTL:
<c:out value="${myForm.map.propName}"/>
or <c:out value="${myForm.map['propName']}"/>
The Struts tags _do_ recognize DynaBeans,
<bean:write name="myDynaBean" property="name" />
but then you're back to needing an expression in the <logic:equal> 'value'
attribute.
This is ugly, but it works:
<c:set var="jstlName">
<bean:write name="myDynaBean" property="name" />
</c:set>
<c:out value="${jstlName}">
I've never needed to do this, so there may be another combination of things
that will get you what you need.
As for comparing objects, <logic:equal> turns into:
<c:if test="${someObj.prop eq someRequestAttr}"> ... </c:if>
--
Wendy Smoak
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]