2011-03-27 6 views
11

मैं कुछ ऐसा करना चाहता हूं:जावा जेएसपी के लिए जेएसटीएल में मैं "नेस्टेड अगर" कैसे करूं?

<c:choose> 
    <c:when test="${empty example1}"> 
    </c:when> 
    <c:otherwise> 
     <c:when test="${empty example2}"> 
     </c:when> 
     <c:otherwise> 
     </c:otherwise>    
    </c:otherwise> 
</c:choose> 

क्या यह भी संभव है? दौड़ने की कोशिश करते समय मुझे एक अपवाद फेंक दिया जाता है।

धन्यवाद।

उत्तर

16

आप इसे इस तरह के और अधिक करने की जरूरत है:

<c:choose> 
    <c:when test="${empty example1}"> 
     <!-- do stuff --> 
    </c:when> 
    <c:otherwise> 
     <c:choose> 
      <c:when test="${empty example2}"> 
       <!-- do different stuff --> 
      </c:when> 
      <c:otherwise> 
       <!-- do default stuff --> 
      </c:otherwise> 
     </c:choose> 
    </c:otherwise> 
</c:choose> 

शब्दाडंबर यहाँ दिखाया गया है क्यों एक्सएमएल बहु स्तरीय सशर्त बयान को लागू करने के लिए एक गरीब भाषा है का एक अच्छा उदाहरण है।

+0

शायद ऐसा है, लेकिन वर्बोसिटी का यह स्तर आवश्यक नहीं है। @ बालुससी के पास एक और अधिक सुरुचिपूर्ण और पठनीय समाधान है। इसका मतलब एक ही बात है, क्योंकि 'सी: जब' के बाद 'c: अन्यथा '' if-else if' जैसा ही है। – hotshot309

+0

पर्याप्त मेला, लेकिन वैकल्पिक उदाहरण भी घबराहट और verbose है। 'सी: चुनें' मानव पठनीयता के संदर्भ में मूल्य के कुछ भी नहीं जोड़ता है, उदाहरण के लिए, न ही तार्किक स्थिति को 'test = 'के रूप में निर्दिष्ट करना है, और इसी तरह। मेरा उदाहरण सरलीकृत किया जा सकता है, लेकिन एक्सएमएल अभी भी एक बहुत ही खराब भाषा है जो प्रतिनिधित्व करने के लिए/elseif/else तर्क है। – aroth

9

आप <c:choose> में एकाधिक <c:when> एस का उपयोग कर सकते हैं।

<c:choose> 
    <c:when test="${empty example1}"> 
    </c:when> 
    <c:when test="${empty example2}"> 
    </c:when> 
    <c:otherwise> 
    </c:otherwise>    
</c:choose> 
+1

मैं सम्मान से असहमत हूं कि यह हमेशा संभव है। जिस परिदृश्य में मैंने एक संदेश प्रदर्शित किया है जब उपयोगकर्ताओं के पास कोई निश्चित अनुमति नहीं है। तब रेडियो बटनों का एक सेट दिखाता है यदि उनके पास उन अनुमतियां हैं। उसमें घिरा हुआ एक और सशर्त रेडियो बटन है जो उपयोगकर्ताओं के आगे सबसेट के लिए पेश किया जाता है। एक अच्छी चर्चा के लिए धन्यवाद! – noogrub

+0

हाइजैक से नफरत है, लेकिन क्या आप इसे देख सकते हैं? http://stackoverflow.com/questions/22622126/if-else-or-when-condition-in-jstl। बहुत बहुत धन्यवाद, और फिर क्षमा करें ओपी! किसी का ध्यान रखना था :) – CodingInCircles

0

मैं @ बलुससी से सहमत हूं - आप कथन को सरल बना सकते हैं। याद रखें कि c:when कथन पारस्परिक रूप से अनन्य हैं, जैसे if-else if ब्लॉक।

JSTL 1.2 spec कहा गया है कि c:choose कम से कम एक c:when बयान के माता पिता होना चाहिए, और है कि c:when हमेशा एक ही तत्काल माता पिता के साथ कम से कम एक c:otherwise बयान पूर्व में होना चाहिए। अनिवार्य रूप से, इसका मतलब यह भी है कि प्रत्येक c:when में c:otherwise होना चाहिए, इसके बाद c:choose के अंदर, और c:choose किसी भी c:when + c:otherwise से घिरा होना चाहिए। जो मैं देख सकता हूं, उससे spec c:choose तत्वों को घोंसला नहीं देता है, इसलिए मुझे नहीं पता कि यह काम करता है - लेकिन मुझे नहीं लगता कि आपको कभी भी घोंसले में मजबूर होना होगा।

संबंधित मुद्दे