struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Fredrik Boström <fredrik.bost...@helsinki.fi>
Subject logic:lessThan inside logic:iterate
Date Thu, 16 Jun 2005 17:14:09 GMT
Dear list,

I've been fighting this problem for some time now, and can't come up
with a solution. Please advice.

In my jsp page I'm iterating an array of Category objects which resides
in the request scope. This is done with the logic:iterate tag like this:

<logic:iterate id="categories" name="category_array">

Each Category-object contains a Message-object field called lastmessage
which in turn contains a timestamp-field (a long).

In session-scope, there is a User object with a lastlogin field (a long).

All objects have the appropriate getters (and setters) for all fields.

Inside the iteration, I'm trying to do a comparison between the
timestamp field of the Message object inside the Category object
currently processed and the lastlogin field of the user object. This is
how I'd like it to work:

<logic:iterate id="categories" name="category_array">
   <logic:present name="user" scope="session">
     <logic:lessThan name="user"
                     property="lastlogin"
                     value="category.lastmessage.timestamp">
        //do something
     </logic:lessThan>
   </logic:present>
</logic:iterate>

Now this doesn't work since the timestamp field is referenced wrongly.
My next thought was to use logic-el taglib, but there's no lessThan tag
in that library, because the jstl-c library is supposed to offer the
same functionality. I tried jstl-c's c:if tag, but the problem is that I
can't reference the iterating categories object, like this:

<c:if test="${user.lastlogin < categories.lastmessage.timestamp}">
   //do something
</c:if>

This doesn't recognize the categories property. So then I'd have to use
the c:iterate tag, but then again I have a bunch of <bean:write/> and
other el-tags inside the iteration as well, using the categories
property created by the logic:iterate tag. These tags wouldn't work
properly if using inside a c:iterate tag (i suppose).

So, what should I do? How can I reference the timestamp-field in the
Message-object inside the Category object in a lessThan tag inside an
iteration? (phew)

Thankful for any advice.

    Fredrik Boström



The relevant code:

<table class="categorytable">
  <logic:iterate id="categories" name="category_array">
    <tr>
      <th>
       <html:link action="/ShowThreads.do"
                  paramId="categoryId"
                  paramName="categories"
                  paramProperty="id">
         <bean:write name="categories"
                     property="name"
                     filter="false" />
       </html:link>
       <logic:present name="user" scope="session">
         <logic:lessThan>  <!-- compare user.lastlogin to      -->
                           <!-- category.lastmessage.timestamp -->
           New messages!
         </logic:lessThan>
       </logic:present>
      </th>
      <th class="categorycontrols">
        <logic:present name="user" scope="session">
          <logic:equal name="user" property="sumode" value="true">
            <html-el:link
action="/EditCategory.do?action=edit&categoryId=${categories.id}">
              Edit
            </html-el:link>
            <html-el:link
action="/EditCategory.do?action=delete&categoryId=${categories.id}">
              Delete
            </html-el:link>
          </logic:equal>
        </logic:present>
      </th>
    </tr>
     <tr>
      <td colspan="2">
       <bean:write name="categories"
                   property="description"
                   filter="false"/>
      </td>
     </tr>
   </logic:iterate>
</table>



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


Mime
View raw message