2012-02-08 15 views
6

मेरे पास नेस्टेड फ़ंक्शंस का एक जटिल सेट है जो अनिवार्य रूप से डेटा को स्वच्छ करता है।मैं जेएसटीएल/ईएल में तारों को कैसे जोड़ और स्वच्छ कर सकता हूं?

आइए दिखाएं कि मैं पहले नाम-अंतिम नाम संयोजन को उत्सर्जित करना चाहता हूं जिसे स्वच्छ किया गया है, लेकिन नाम दो अलग-अलग चर के रूप में प्रस्तुत किए जाते हैं।

मुझे एहसास है कि मैं प्रत्येक चर को अलग से उत्सर्जित कर सकता हूं, प्रत्येक को स्वच्छता कार्यों के पूरे सेट में लपेट सकता हूं, लेकिन यह दोनों सुरुचिपूर्ण और खतरनाक है: हार्ड-टू-रीड, डुप्लिकेट कोड के बड़े हिस्से को सिंक में रखने की आवश्यकता है ऐप के जीवन भर में।

कोई वास्तविक भाषा में, मैं कुछ इस तरह लिखना होगा:

${fn:trim(fn:replace(fn:replace(fn:replace(fn:replace(firstname + lastname, ..., ...), ..., ...), ..., ...), ..., ...))} 

(यहाँ, के साथ साथ एक सच्चे नीले संयोजन ऑपरेटर प्रतिनिधित्व करता है; जावास्क्रिप्ट का '+', पीएचपी के, आदि '।')

यह पहले से ही चर को संयोजित करने के लिए एक अलग कथन का उपयोग करने के लिए बेतुका लगता है।

नीचे पंक्ति: इस सवाल को इंटरनेट पर एक हजार बार पूछा गया है, लेकिन सभी उत्तरों प्रभावी ढंग से वैकल्पिक कार्यान्वयन का प्रस्ताव देकर सवाल को चकमा देते हैं। मैं जानना चाहता हूं कि यह सुविधा मौजूद है या नहीं, और दस्तावेज तुच्छ से भी बदतर है।

कृपया, मेरी पीड़ा खत्म करो और मुझे एक सीधा जवाब दें।

+5

यह एक JSP का काम नहीं है पंजीकृत किया गया है और किया जाता है। इसे जावा में, अपने पसंदीदा एमवीसी ढांचे की एक सर्वलेट या कार्रवाई में करें, और बस जेएसपी में तैयार, स्वच्छता परिणाम प्रदर्शित करें। –

उत्तर

22

आप वास्तव में क्या करना चाहते हैं? एचटीएमएल/एक्सएमएल विशेष पात्र जैसे <, > और एक्सएसएस छेद को रोकने के लिए? यदि हां, तो क्यों न केवल <c:out> का उपयोग कर रहे हैं?

<c:out value="${firstname} ${lastname}" /> 

तो चित्र में वास्तव में अधिक है, साफ एक public static उपयोगिता विधि में है कि काम refactor, एक ईएल समारोह के रूप में यह रजिस्टर और यह आह्वान करने के लिए किया जाएगा।

उदा।

public final class Functions { 

    private Functions() { 
     // Hide c'tor in utility classes. 
    } 

    public static String sanitizeNames(String firstname, String lastname) { 
     // TODO: Implement. 

     return sanitizedFirstname + sanitizedLastname; 
    } 

} 

जो एक /WEB-INF/functions.tld फ़ाइल

<?xml version="1.0" encoding="UTF-8" ?> 
<taglib 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" 
    version="2.1"> 

    <display-name>Custom Functions</display-name>  
    <tlib-version>1.0</tlib-version> 
    <uri>http://example.com/functions</uri> 

    <function> 
     <name>sanitizeNames</name> 
     <function-class>com.example.Functions</function-class> 
     <function-signature>java.lang.String sanitizeNames(java.lang.String, java.lang.String)</function-signature> 
    </function> 
</taglib> 

में इस प्रकार के रूप में इस प्रकार है

<%@taglib uri="http://example.com/functions" prefix="f" %> 
... 
${f:sanitizeNames(firstname, lastname)} 
+0

मैंने इस मामले को इस मामले में आगे नहीं बढ़ाया जिसने मेरे प्रश्न को प्रेरित किया, लेकिन मैं दृष्टिकोण पर आपके विवरण की बहुत सराहना करता हूं। मैं भविष्य में इसका उपयोग करूँगा। :) – Tom

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