2009-01-13 23 views
8

के साथ स्प्रिंग एमवीसी टैग इंटरैक्शन मेरे पास एक जेएसपी है जो स्प्रिंग का उपयोग कर रहा है: कमांड ऑब्जेक्ट पर नियंत्रण बांधने के लिए फॉर्म टैग।कस्टम टैग

मैं इसे निम्नानुसार संशोधित करना चाहता हूं: यदि नियंत्रण प्रदर्शित करने से [कुछ शर्त सत्य है]; अन्यथा, बस पाठ प्रदर्शित करें। (उदाहरण: यदि उपयोगकर्ता एक व्यवस्थापक है, तो नियंत्रण प्रदर्शित करें, अन्यथा केवल टेक्स्ट प्रदर्शित करें। यदि संशोधन के लिए व्हाट्सिट अभी भी खुला है, तो नियंत्रण प्रदर्शित करें, अन्यथा टेक्स्ट प्रदर्शित करें।)

दूसरे शब्दों में, मुझे यह चाहिए :

<c:choose> 
    <c:when test="SOME TEST HERE"> 
      <form:input path="SOME PATH" /> 
    </c:when> 
    <c:otherwise> 
      <p>${SOME PATH}</p> 
    </c:otherwise> 
</c:choose> 

लेकिन मुझे हर क्षेत्र के लिए इसे बनाने का एक आसान तरीका चाहिए (कई हैं)।

अगर मैं ऊपर पाठ (दिए गए "कुछ पथ") उत्पन्न करने के लिए एक कस्टम टैग बनाने, स्प्रिंग कस्टम टैग बाध्य हो जाएगी?

मुझे लगता है कि क्या मैं वास्तव में पूछ रहा हूँ है: मैं कस्टम टैग है कि उस तो बाध्य हो स्प्रिंग कस्टम टैग उत्पन्न बना सकते हैं? या सभी कस्टम टैग (मेरा और वसंत) एक साथ संभाला जाता है?

उत्तर

10

अक्सर इसका एकमात्र समाधान यह कोशिश करना है। एक JSP कस्टम टैग पुस्तकालय, एक पैरामिट्रीकृत JSP शामिल हैं, और एक JSP2 टैग फ़ाइल -

मैं इसे तीन अलग अलग तरीकों की कोशिश की।

पहले दो काम नहीं किया है (हालांकि मुझे लगता है टैग पुस्तकालय काम करने के लिए बनाया जा सकता है), लेकिन टैग फ़ाइल किया! समाधान Expert Spring MVC and Web Flow में दिए गए उदाहरण पर ढीले ढंग से आधारित था।

यहाँ वेब-INF/टैग/renderConditionalControl.tag में मेरे कोड है:

<%@ tag body-content="tagdependent" isELIgnored="false" %> 
<%@ attribute name="readOnly" required="true" %> 
<%@ attribute name="path" required="true" %> 
<%@ attribute name="type" required="false" %> 
<%@ attribute name="className" required="true" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="form" uri="/WEB-INF/spring-form.tld" %> 
<%@ taglib prefix="spring" uri="/WEB-INF/spring.tld" %> 

<c:if test="${empty type}"> 
<c:set var="type" value="text" scope="page" /> 
</c:if> 

<spring:bind path="${path}"> 
    <c:choose> 
     <c:when test="${readOnly}"> 
      <span class="readOnly">${status.value}</span> 
     </c:when> 
     <c:otherwise> 
      <input type="${type}" id="${status.expression}" name="${status.expression}" 
        value="${status.value}" class="${className}" /> 
     </c:otherwise> 
    </c:choose> 
</spring:bind> 

और यहाँ jsp में कोड है:,

पहले अन्य taglibs निर्देशों:

<%@ taglib tagdir="/WEB-INF/tags" prefix="tag" %> 

और फॉर्म के भीतर:

<tag:renderConditionalControl path="someObject.someField" type="text" readOnly="${someBoolean}" className="someClass" /> 
+0

यह वही है जो मुझे चाहिए! – kosoant

+0

आप इस पर कैसे गए हैं? मैं टैग फाइलों का उपयोग कर रहा हूं लेकिन यह सब