2012-12-24 12 views
6

मैं दो मानों की तुलना करने की कोशिश कर रहा हूँ: इटरेटरस्ट्रूट 2 टैग और ओजीएनएल का उपयोग करके दो तारों की तुलना कैसे करें?

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

से सत्र और परागकोष से एक लेकिन मैं अपने मूल्यों की तुलना करने में असमर्थ हूँ, कृपया आप मुझे जहाँ मैं गलतियों कर रहा हूँ बता सकते हैं?

उत्तर

8

%{} सभी कथन के आसपास (यदि आवश्यक हो) को मध्य में नहीं रखा जाना चाहिए।

स्ट्रिंग्स के लिए आप का उपयोग करना चाहिए .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)"> 
+0

Così funziona bene! –

5

(नहीं एक जवाब है, लेकिन दो सुझाव, और मैं स्वरूपण की जरूरत; एंड्रिया के जवाब सही है।)

स्वयं की स्वच्छता और अनुसरण करने वालों के लिए, जेएसपी के उस हिस्से को एक पंक्ति में बदल दें:

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

विषय-नाम इनलाइन सीएसएस के बजाय सीएसएस उपयोग पर विचार करें और पूरी तरह से इसे से बचने के, मोटे तौर पर: (

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 स्थानांतरित करने के लिए अच्छे होगा, लेकिन आप विचार मिलता है। ऐसा करने से थीम की जानकारी कहां से आती है, इसमें बहुत लचीलापन की अनुमति मिलती है।

+0

+1 मुझे आपके सुझाव पसंद हैं। –

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> 
संबंधित मुद्दे