2012-06-28 4 views
5

में पिछला वर्णमाला वर्णों पर रूपांतरण त्रुटि नहीं फेंकता है मैं दशमलव इनपुट को परिवर्तित करने के लिए <f:convertNumber> टैग का उपयोग कर रहा हूं।f: convertNumber दशमलव

<f:convertNumber minFractionDigits="2" /> 

लेकिन यह पीछे वर्णमाला वर्णों को स्वीकार कर रहा है। उदाहरण के लिए, यदि मैं 12345.1234AAA इनपुट करता हूं तो यह 12345.123 में परिवर्तित हो जाता है। मैं इसे वर्णमाला वर्णों को कम करने के बजाय उस पर एक रूपांतरण त्रुटि फेंकना चाहता हूं। इसे कैसे प्राप्त किया जा सकता है?

उत्तर

3

यह केवल java.text.NumberFormat की standard behavior रूप <f:convertNumber> द्वारा प्रयोग किया जाता है: यह ट्रिम पहले नहीं-अनुमति चरित्र के बाद सभी प्रविष्टियों (जैसे पत्र या इनपुट स्थान में परिभाषित की तुलना में दशमलव विभाजक अन्य)। रूपांतरण केवल तभी विफल रहता है जब आपत्तिजनक चरित्र शुरुआत में है।

मुझे यह व्यवहार वास्तव में पसंद नहीं है क्योंकि कोई उपयोगकर्ता अपने गलत टाइप किए गए मान को छंटनी नहीं कर सकता है, जिसके परिणामस्वरूप अनजान और (इससे भी बदतर) गलत मूल्य में अनजान ऑटो-सुधार हुआ है।

दिलचस्प बात यह है कि विशिष्ट संख्या परिवर्तक अलग-अलग व्यवहार करते हैं। <f:converter converterId="javax.faces.Double" /> का उपयोग स्वचालित रूप से गैर-संख्यात्मक इनपुट को संभाल नहीं करता है, लेकिन इसके बजाय रूपांतरण विफल रहता है। हालांकि, टैग में कनवर्टन के अतिरिक्त गुण नहीं हैं, जैसे मिनीफ्रैक्शनडिजिट्स या मुद्रा प्रतीकों।

एक अलग दृष्टिकोण आपके स्वयं के कस्टम कनवर्टर को लिखना होगा जो मानक कनवर्टर को in this answer वर्णित करता है। फिर आप पात्रों के लिए मूल्य की जांच कर सकते हैं और यदि आपको कोई मिल जाए तो आगे की प्रक्रिया (एक रूपांतरण रूपांतरण अपवाद फेंकना) को सीधे रोक दें। यदि मान पहले से ही वर्ण-मुक्त है तो आप कनवर्टर के मानक व्यवहार को कॉल कर सकते हैं।

दोनों तरीकों की कमी यह है कि आप convertNumber की अतिरिक्त क्षमताओं को खो देते हैं। आपके पास minFractionDigits या currencySymbol पर <f:converter> पर विशेषताएँ नहीं हैं, इसलिए यदि आपको इसकी आवश्यकता है तो आपको पैरामीटर में पास करने के लिए एक और तरीका खोजना होगा। हमारे कार्यान्वयन में इनमें से किसी की आवश्यकता नहीं है, इसलिए मैंने इसे और आगे नहीं देखा है (हम दृष्टिकोण ए के लिए गए थे), लेकिन this answer ऐसा करने के लिए एक दृष्टिकोण प्रस्तुत करता है।

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