2010-02-02 5 views
6

मैं हाल ही में वसंत रूप टैगलिब के साथ खेल रहा हूं और काफी परेशान घटना में आया हूं।वसंत रूप taglib अक्षम विशेषता वास्तव में एक स्ट्रिंग को हल करने के लिए है?

<form:select path="whatever" disabled="${true}"> 

-चुने तत्व अक्षम नहीं है कि

<form:select path="whatever" disabled="${'true'}"> 

-चुने तत्व यह है कि अक्षम किया गया है रेंडर करेगा प्रस्तुत करना होगा।

यह मुझे इंगित करता है कि टैग उस विशेषता में एक स्ट्रिंग की अपेक्षा करता है और किसी भी बूलियन मानों को संभवतः (पहले संभवतः प्रकार की जांच कर रहा है) को मजबूर करने से इंकार कर रहा है।

प्रभाव यह है कि मैं <form:select path="whatever" disabled="${someOtherfield.selectedId != -1}" /> जैसे कुछ करने में असमर्थ हूं जो कुछ ऐसा है जो हमारे सिस्टम में अक्सर होता है।

क्या मैं बस टैग टैगिब कार्यक्षमता के कुछ हिस्से को याद कर रहा हूं? क्या यह एक वैध डिजाइन निर्णय है? एक दोष?

+0

मैं वसंत मंच और/या JIRA पर इस को ऊपर उठाने का सुझाव देने के लिए जा रहा था, लेकिन मैं देख रहा हूँ आप पहले से ही अपने आप को और एक JIRA मुद्दा :) – skaffman

+0

मैं अभी तक करने के लिए एक पूरी धागा है वसंत मंच पर मेरे किसी भी प्रश्न का उत्तर दें, मुझे लगता है कि कुछ वर्षों में लगभग 10 या तो धागे से बाहर है। तो जब भी मैं कोशिश कर रहा हूं, मैं वास्तव में केवल वहां पोस्ट करता हूं क्योंकि मुझे लगता है कि यह सही जगह है। ऐसा इसलिए नहीं है क्योंकि मुझे लगता है कि यह कोई जवाब देने की संभावना है। –

उत्तर

5

ठीक है, मैं कुछ और इस एक के आसपास खुदाई की थी, क्योंकि काम arounds भी बदसूरत देख रहे थे:

है, निम्नलिखित कोड अगर वे disabled विशेषता boolean बनाने के काम नहीं होता।

http://forum.springsource.org/showthread.php?t=84102

समस्या यह है कि JSP एल का मूल्यांकन किया गया था, और आँख बंद करके "सही" .equals

एक बूलियन करने के लिए एक स्ट्रिंग की तुलना करना है कि विधि का उपयोग कर का उपयोग करते हुए कि मूल्यांकन के परिणाम की तुलना हमेशा वापस आ जाएगी था झूठा क्योंकि प्रकार का मिलान नहीं होता है, इसलिए यह निश्चित रूप से एक दोष है।

सौभाग्य से गलती पर अक्षम विधि एक संरक्षित एक लाइनर है, इसलिए मैं 8 इनपुट टैग के प्रभाव को बढ़ाकर और उस विधि को थोड़ी अधिक मजबूत तुलना करने के लिए ओवरराइड करके इसे काम करने में सक्षम हूं।

तो जवाब है, हाँ, यह एक दोष है, और स्काफमैन की टिप्पणियों से ऐसा लगता है कि पुरानी लाइब्रेरी के साथ यह एक समस्या है, जिसे जेएसपी ईएल लागू नहीं किया गया था।

अपने जवाब लोगों के लिए धन्यवाद

1

यह थोड़ा अजीब है, ठीक है। स्प्रिंग स्रोत कोड से पता चलता है कि disabledSelectTag की संपत्ति String है, boolean नहीं है। यह स्पष्ट रूप से करने के लिए सही बात नहीं है, लेकिन मुझे संदेह है कि यह अभी भी विरासत कारणों (वसंत-रूप.tld पूर्व-दिनांक जेएसपी ईएल) के लिए है।

जो इसे boolean को String में कॉन्स करने के लिए जेएसपी रनटाइम तक छोड़ देता है, और स्पष्ट रूप से यह ऐसा नहीं करेगा। मैं इसके बारे में कम आश्चर्यचकित हूं, क्योंकि जेएसपी ईएल कुख्यात रूप से सीमित है।

तो आप दो अर्ध-टूटा कार्यान्वयन के बीच पकड़े गए हैं। आपको बस यह सुनिश्चित करने की आवश्यकता होगी कि आप उस विशेषता के लिए स्ट्रिंग मान पास करते हैं।

+0

जो मैं देख सकता हूं, वह एक वसंत eval तंत्र का उपयोग करता है जो जेएसपी 2 ईएल और जेएसपी 1 ईएल दोनों का समर्थन करता है, इसलिए मुझे लगता है कि यह एक कार्यान्वयन में बस एक छोटी सी बग है जो एक घृणित डिजाइन दोष की बजाय पिछड़ा संगतता बनाए रखने की कोशिश करता है –

0

इस डिज़ाइन का कारण यह है कि कंटेनर इसका मूल्यांकन नहीं करते समय ईएल अभिव्यक्ति मूल्यांकन को मजबूर करने के लिए उनके पास विशेष फ़ॉलबैक कोड है। उदाहरण के लिए, इस कोड:

<%@ page isELIgnored = "true" %> 
... 
${'Simple text'} <spring:message text = "${'Message text'} />" 

${'Simple text'} Message text

शायद पैदा करता है, यह कुछ अजीब विरासत कंटेनर विन्यास के लिए उपयोगी है।

<%@ page isELIgnored = "true" %> 
... 
<form:select ... disabled = "${true}" />  
संबंधित मुद्दे

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