How to compare two strings using Struts2 tags and OGNL?

21,923

Solution 1

%{} should be put (if necessary) around all the statement, not in the middle.

For Strings you should use .equals, .equalsIgnoreCase, .contains, .indexOf etc... Not ==.

Change to this:

<s:iterator value="themes" status="currentRecord"> 
   <s:if test="%{#session.usertheme.equalsIgnoreCase(themeName)}">
      <td align="center" bgcolor="red">
   </s:if>
   <s:else>
      <td align="center" bgcolor="yellow">
   </s:else>
....

this works too:

   <s:if test="#session.usertheme.equalsIgnoreCase(themeName)">

Solution 2

(Not an answer, but two suggestions, and I needed formatting; Andrea's answer is correct.)

For the sanity of yourself and those that follow, turn that chunk of JSP into a single line:

  <s:iterator value="themes">
    <tr>
      <s:set var="currTheme" value="%{userTheme == themeName ? 'red' : 'green'}"/>
      <td bgcolor="${currTheme}">Cell content</td>
    </tr>
  </s:iterator>

Consider using theme-named CSS instead of inline CSS and avoid it completely, roughly:

td.theme1 {
  background-color: red;
}

td.theme2 {
  background-color: green;
}

td.theme3 {
  background-color: #daa520;
}

(Assuming themes named "theme1", "theme2", "theme3", but that's not relevant.)

<table class="themed-table">
  <s:iterator value="themes">
    <tr>
      <td class="${themeName}">Cell content</td>
    </tr>
  </s:iterator>
</table>

It'd be nicer to move the style info "up" a level, e.g., table.theme1 td, but you get the idea. Doing so allows a lot of flexibility in where the theme info comes from and so on.

Share:
21,923
Dan
Author by

Dan

Updated on June 18, 2020

Comments

  • Dan
    Dan almost 4 years

    I am trying to compare two values : one from session and anther from iterator

    <s:iterator value="themes" status="currentRecord"> 
        <s:if test="%{usertheme}) == %{themeName}">
            <td align="center" bgcolor="red">
        </s:if>
        <s:else>
            <td align="center" bgcolor="green">
        </s:else>
    </s:iterator>
    

    But I am unable to compare my values, please can you tell me where I am doing mistakes ?