Как сравнить две строки с помощью тегов Struts2 и OGNL?

Я пытаюсь сравнить два значения: одно из сеанса и другое из итератора

<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>

Но я не могу сравнить свои значения, не могли бы вы сказать мне, где я делаю ошибки?


person Dan    schedule 24.12.2012    source источник


Ответы (2)


%{} следует ставить (при необходимости) вокруг всего утверждения, а не посередине.

Для строк вы должны использовать .equals, .equalsIgnoreCase, .contains, .indexOf и т.д.... Не ==.

Измените на это:

<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>
....

это тоже работает:

   <s:if test="#session.usertheme.equalsIgnoreCase(themeName)">
person Andrea Ligios    schedule 24.12.2012
comment
Привет, это не работает для всех случаев ‹s:if test=%{#session.usertheme.equals('A')}› или ‹s:if test=%{'A'.equals(#session.usertheme) }› с этим работает, как это сравнить??? - person Erikson Rodriguez; 21.04.2021

(Не ответ, а два предложения, и мне нужно форматирование; ответ Андреа правильный.)

Для спокойствия себя и тех, кто последует, превратите этот кусок JSP в одну строку:

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

Рассмотрите возможность использования CSS с названием темы вместо встроенного CSS и полностью избегайте его, грубо говоря:

td.theme1 {
  background-color: red;
}

td.theme2 {
  background-color: green;
}

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

(Предполагается, что темы называются "theme1", "theme2", "theme3", но это не имеет значения.)

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

Было бы лучше переместить информацию о стиле «вверх» на уровень, например, table.theme1 td, но вы поняли идею. Это дает большую гибкость в том, откуда берется информация о теме и так далее.

person Dave Newton    schedule 24.12.2012