2012-12-24 15 views
6

ich zwei Werte zu vergleichen bin versucht: ein von Sitzung und Anthere von IteratorWie zwei Strings mit Struts2-Tags und OGNL zu vergleichen?

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

Aber ich bin nicht in der Lage meine Werte zu vergleichen, bitte können Sie mir sagen, wo ich Fehler tue?

Antwort

8

%{} sollte (wenn nötig) um die ganze Aussage, nicht in der Mitte gelegt werden.

For Strings sollten Sie .equals, .equalsIgnoreCase, .contains, .indexOf etc ... Nicht ==.

Änderung dieser:

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

auch dies funktioniert:

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

Così funziona bene! –

5

(keine Antwort, aber zwei Vorschläge, und ich brauchte die Formatierung, Andrea Antwort richtig ist.)

Für die Gesundheit von Ihnen selbst und denen, die folgen, drehen Sie diesen Teil der JSP in eine einzige Zeile:

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

Betrachten wir anstelle von Inline-CSS-Thema-Namen mit Hilfe von CSS und es vollständig vermeiden, etwa:

td.theme1 { 
    background-color: red; 
} 

td.theme2 { 
    background-color: green; 
} 

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

(Themen namens "theme1", "theme2", "theme3" Unter der Annahme, aber das ist nicht relevant.)

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

es schöner wäre, den Stil info "up" eine Ebene, zB table.theme1 td, aber Sie bekommen die Idee zu bewegen. Dies ermöglicht eine große Flexibilität, woher die Themeninfo kommt und so weiter.

+0

+1 Ich mag Ihre Vorschläge. –

0
<!--name attribute inside select tag must be a variable in action class with getter/setter --> 
<!-- test variable sets the value of selected item in action class --> 
<select name="test"> 
    <!-- name attribute could be anything you want but value attribute must be a model class variable--> 
    <s:set name="lead_string_LS_ID" value="MasterDataModel.string_LS_ID" /> 
     <!-- value attribute must be a list to iterate, status (an instanceof IteratorStatus will be pushed into stack upon each iteration)or result --> 
     <!-- var Name used to reference the value pushed into the Value Stack (my list contain leadSource_String_Id)--> 
     <s:iterator value="leadSource_list" status="result" var="leadSource_String_Id"> 
       <!--#lead_string_LS_ID is value taken from <set> tag above. Note # must be in-front of the name 
        leadSource_String_Id is element specified in var of <iterator> tag 
       --> 
       <s:if test='(#lead_string_LS_ID.equals(leadSource_String_Id))'> 

        <option value="<s:property value='leadSource_String_Id'/>" selected="selected"> 
         <s:property value="leadSource_String_Name" /> 
        </option> 
       </s:if> 
       <s:else> 
        <option 
         value="<s:property value='leadSource_String_Id'/>"> 
         <s:property value="leadSource_String_Name" /> 
        </option> 
       </s:else> 
     </s:iterator> 
</select> 
Verwandte Themen