2012-05-23 8 views
10

परियोजनाओं में से एक में मेरे पास गैर-अंग्रेज़ी सामग्री (फिनिश) फॉर्म डेटा पर उपलब्ध है। हम प्राइमफेस के साथ जेएसएफ 2.0 का उपयोग कर रहे हैं। सर्वर पर डेटा जमा करते समय मुझे परेशानी होती है। जब मैं फॉर्म जमा करता हूं तो डेटा दूषित हो रहा है। केवल फिनिश वर्ण ही भ्रष्ट हो रहे हैं।जेएसएफ में यूटीएफ -8 फॉर्म जमा करना डेटा को दूषित कर रहा है

क्या किसी को भी इस मुद्दे का सामना करना पड़ा है और समाधान मिला है?

+0

क्या आप सबमिट के दौरान फ़ाइल अपलोड कर रहे हैं? मैं चेक भाषा में ऐप्स विकसित करता हूं और यह मेरे साथ IceFaces फ़ाइल अपलोड घटक के साथ हुआ। लेकिन सामान्य मामलों में सबकुछ ठीक था। आप फ़िनिश वर्णमाला सेट करने के लिए फ़िल्टर का उपयोग कर सकते हैं लेकिन यह अभी भी अजीब त्रुटि है –

उत्तर

20

प्राइमफ़ेस 3.0 के बाद से यह ज्ञात समस्या है। वर्तमान HTTP अनुरोध अजाक्स अनुरोध है या नहीं, यह एक बदलाव के कारण होता है। अनुरोध हेडर के बजाय अनुरोध पैरामीटर द्वारा इसकी पहचान की गई है। जब JSF व्यू को पुनर्स्थापित करने से पहले पहली बार अनुरोध पैरामीटर पुनर्प्राप्त किया जाता है, तो सभी अनुरोध पैरामीटर को सर्वर के डिफ़ॉल्ट वर्ण एन्कोडिंग का उपयोग करके पार्स किया जाएगा जो अक्सर जेएसएफ के अपने डिफ़ॉल्ट वर्ण एन्कोडिंग यूटीएफ -8 के बजाय आईएसओ -885 9 -1 होता है। गहराई से स्पष्टीकरण के लिए Unicode input retrieved via PrimeFaces input components become corrupted देखें।

समाधानों में से एक एक फ़िल्टर बनाना है जो request.setCharacterEncoding("UTF-8") करता है।

@WebFilter("*.xhtml") 
public class CharacterEncodingFilter implements Filter { 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
     request.setCharacterEncoding("UTF-8"); 
     chain.doFilter(request, response); 
    } 

    // ... 
} 
+0

यह मेरे लिए निम्नलिखित एनोटेशन के साथ काम करता है: @WebFilter (filterName = "CharacterEncodingFilter", urlPatterns = {"/ *"}) धन्यवाद – Kiavash

+2

@Kia: जाहिर है आपका 'FacesServlet' को' * .xhtml' पर मैप नहीं किया गया है, लेकिन कुछ/जैसे/चेहरे/* 'या' * .jsf' पर मैप किया गया है। फिर आपको फ़िल्टर के यूआरएल पैटर्न को वही होना चाहिए। '/ *' वास्तव में ** प्रत्येक एकल ** HTTP अनुरोध से मेल खाएगा। वैसे, बस '@WebFilter ("/ *") 'भी पर्याप्त था। – BalusC

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