2009-11-19 20 views
5

कुछ एचटीएमएल टैग "सत्य" के रूप में दिए गए गुण के "किसी भी" मूल्य की व्याख्या करते हैं -> विकल्प टैग दिमाग में आते हैं।जेएसपीएक्स से <विकल्प चयनित = "सत्य"> आउटपुट कैसे करें?

मैं अक्सर कुछ इस तरह कर रही अंत:

<c:choose> 
    <c:when test="${isSelected}"/> 
     <option selected="true">Opt1</option> 
    </c:when> 
    <c:otherwise/> 
     <option>Opt1</option> 
    </c:otherwise> 
</c:choose> 

मैं जानता हूँ कि मैं इस व्यवहार लेकिन encapslate को भी बहुत बदसूरत हो जाता है कि, जब तक मैं जावा में यह कोड एक कस्टम घोषणा कर सकते हैं।

क्या ऐसा करने का कोई शानदार तरीका है?

उत्तर

0

हाँ, एक समझदारी भरा तरीका

<option selected="selected">Opt1</option> 

लिखने के रूप में है कि mandated by XHTML क्या है किया जाएगा।

मुझे पता है कि आप वास्तव में क्या :-) मुझे लगता है कि अपने रास्ते ठीक है पूछ रहे हैं या आप एक सशर्त अभिव्यक्ति के बजाय का उपयोग कर सकते नहीं है:

<option ${isSelected?"selected=\"selected\"":""}>Opt1</option> 

हालांकि यह जरूरी नहीं कि खूबसूरत छोटा है।

+0

नाइस जवाब, शर्म की बात यह यहाँ काम नहीं करता है। Jspx का कौन सा संस्करण आपके लिए यह करता है? क्या आप वाकई jsp नहीं हैं? – krosenvold

+0

क्षमा करें, यह वास्तव में जेएसपी है; मैं उन्हें पार कर गया है। मुझे लगता है कि आपका रास्ता केवल तब लागू होता है; सी: अगर इस मामले में भी काम नहीं करेगा। – ChssPly76

1

इस पर पहुंचने का एक तरीका कस्टम टैग का उपयोग करना होगा।

मैं दृष्टिकोण है कि JSP2X कनवर्टर लेता चाहते, तो आप इस करते हैं कि आपके वेब-INF/टैग फ़ोल्डर में कस्टम टैग को परिभाषित:

<jspx:element name="option"> 
    <c:if test="${selected}"> 
     <jspx:attribute name="selected">selected</jspx:attribute> 
    </c:if> 
    <jspx:body>Opt1</jspx:body> 
</jspx:element> 

एक अधिक कॉम्पैक्ट दृष्टिकोण कस्टम टैग विशेष रूप से बनाने के लिए हो सकता है एक विकल्प के लिए जो सही चीज करता है, चयनित विशेषता के लिए बूलियन मान ले रहा है, अगर यह सही है, तो चयनित = "चयनित" विशेषता को छोड़कर अन्यथा नहीं। इसमें कुछ समय अधिक कॉम्पैक्ट होगा:

<jspx:option selected="${selected}">Opt1</option> 
+0

मैंने सी नहीं सोचा था: यदि तत्व टैग के भीतर सशर्तों की अनुमति थी। क्या यह बाद के विनिर्देशों में बदलाव है? – krosenvold

+0

ये जेएसपीएक्स: तत्व विनिर्देशन में नहीं है, यह जेएसपी 2 एक्स द्वारा छोड़ा गया एक कस्टम टैग है। –

+0

* श्वास * इच्छा है कि आप इन टिप्पणियों को संपादित कर सकें। =) –

0

<select><option selected="selected"> समस्या के लिए, मैंने तय कर लिया कि मैं, verboseness का एक सा मन नहीं होगा अगर यह केवल एक समय verboseness था ... इसलिए मैं एक टैग दस्तावेज़ बनाया (.tagx) /WEB-INF/tags/select.tagx में तो जैसे:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <jsp:directive.attribute name="id" required="true" /> 
    <jsp:directive.attribute name="name" required="true" /> 
    <jsp:directive.attribute name="options" required="true" /> 
    <jsp:directive.attribute name="selected" required="true" /> 

    <select id="${id}" name="${name}"> 
    <c:forEach var="opt" items="${options}"> 
     <c:choose> 
     <c:when test="${opt == selected}"><option selected="selected">${opt}</option></c:when> 
     <c:otherwise><option>${opt}</option></c:otherwise> 
     </c:choose> 
    </c:forEach> 
    </select> 
</jsp:root> 

और इतने की तरह उपयोग:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<html xmlns="http://www.w3.org/1999/xhtml" version="2.1" 
    ... 
    xmlns:form="urn:jsptagdir:/WEB-INF/tags/"> 

    ... 

    <head> 
     ... 
    </head> 
    <body> 
     <form method="POST" commandName="loginRequest" action="index_login.html"> 
      <fieldset id="loginFieldSet"> 
       ... 

       <div> 
        <label for="day" path="day">Favourite day: </label> 
        <form:select id="day" name="day" selected="Saturday" 
         options="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday" /> 
       </div> 
      </fieldset> 
      <div> 
      <input type="submit" tabindex="3" /> 
      <input type="reset" tabindex="4" /> 
      </div> 
     </form> 
    </body> 
</html> 

krosenvold, मैं नहीं मानता कि इस बदसूरत ... शायद कष्टप्रद है, लेकिन मैं वास्तव में हूँ खुश है मुझे डब्ल्यू नहीं करना था इसके लिए किसी भी कोड को संस्कार करें। एक बार टैग को परिभाषित करने के बाद, आपका जेएसपीएक्स बहुत साफ हो जाता है। इसके अलावा, मुझे नहीं लगता कि इसके लिए एक छोटा सा कट है।

+0

ईएल में टर्नरी ऑपरेटर का उपयोग करें। '<विकल्प $ {opt == चयनित? 'चयनित': ''}> '। एक भारी '' या ' 'और कोड डुप्लिकेशन के लिए कोई आवश्यकता नहीं है। – BalusC

+0

क्या आपने वास्तव में यह कोशिश की है? यह काम नहीं करता है - यह पूरी तरह से अवैध एक्सएमएल है। –

0

इस के आसपास जाने का एक और तरीका है। यह एक हैक का एक सा है लेकिन एक टैगलिब का उपयोग करने का विकल्प है या एक ऐसा विकल्प चुनें जहां आपने खोजा गया टैग डुप्लिकेट किया है, जो काफी अच्छी तरह से काम करता है।

आप टैग के एक JSTL सेट टैग के अंदर मान के रूप में, कुछ इस तरह का निर्माण कर सकते हैं:

<c:set var="mytag" value="&lt; option ${isSelected ? 'selected='\true\' : '' } &gt;"> 

फिर, जहाँ भी आप कि टैग चाहते हैं, तो आप सिर्फ इस तरह उत्पादन:

${mytag} 
संबंधित मुद्दे