2012-05-08 11 views
5

मैं फंस गया हूं और जेएसएफ विशेषज्ञों से निम्नलिखित समस्या के साथ बाहरी सहायता की आवश्यकता है: मैंने विशिष्ट वर्गों के लिए चेहरे-config.xml में कुछ कनवर्टर्स को परिभाषित किया है, इसलिए मेरे पास नहीं है कनवर्टर-विशेषता या टैग हर समय उपयोग करने के लिए। उदाहरण के लिए: जो पूरे घटक पेड़ बनाता है और सीएसवी, HTML में स्तर के बाद के स्तर धर्मान्तरित या जो भी बाद में आवश्यकता हो सकती है:प्रबंधित बीन (जेएसएफ 1.2) में कक्षा के लिए जेएसएफ कन्वर्टर प्राप्त करें

<converter> 
     <converter-for-class>org.joda.time.DateTime</converter-for-class> 
     <converter-class>com.example.converter.JodaDateTimeConverter</converter-class> 
    </converter> 

अब एक JSF-घटक के लिए एक क्रॉलर के लिए की जरूरत (extendedDataTable ज्यादातर अमीर) है पर। सीएसवी, एचटीएमएल, को निर्यात करने के लिए एक सामान्य तरीका ... हर बार इसे लागू करने की आवश्यकता के बिना। यह लगभग (मेरा एक पुराने सहयोगी के महान विचार करने के लिए धन्यवाद) से किया जाता है और यह एक भाग के अलावा महान काम करता है:

Object expressionResult = expression.getValue(FacesContext.getCurrentInstance().getELContext()); 
    expressionResultString = expressionResult.toString(); 

कि आदेश को पुन: प्राप्त एक घंटा की मूल्य: outputText और स्ट्रिंग में बदल देता है। एक आखिरी पंक्ति है जो मैं कनवर्टर-टू-क्लास के साथ प्रतिस्थापित करना चाहता हूं यदि एक विशिष्ट अभिव्यक्ति के लिए एक कस्टम कनवर्टर है। मैं नहीं जानता कि मेरे वर्गों के लिए सटीक कनवर्टर कैसे ढूंढें (जैसे चेहरे-कॉन्फ़िगर द्वारा निर्दिष्ट)। FacesContext मेरे उपयोग के मामले के लिए कोई उपयोगी विधि/वस्तु नहीं प्रतीत होता है। चेहरों को एक्सेस करना-config.xml सीधे गलत लगता है। एक सही दृष्टिकोण की तरह कुछ दिख सकता है:

Converter converter = magically_fetch_the_correct_converter_for_expressionResult_type; 
    converter.getAsString(FacesContext.getCurrentInstance(), component, 
           expressionResult); 

यह अगर मैं खुद को घटकों के लिए कनवर्टर-आईडी और उचित विशेषता/टैग का उपयोग किया है, लेकिन मैं वास्तव में बेकार अतिरिक्त कोड उस तरह से बचना चाहते हैं काफी आसान हो जाएगा।

क्या कोई वहां से बाहर निकल सकता है कृपया मेरी मदद करें?

उत्तर

8

आप Application#createConverter() देख रहे हैं।

Object object = expression.getValue(context.getELContext()); 
Class<?> type = expression.getType(context.getELContext()); 
Converter converter = context.getApplication().createConverter(type); 
String string = converter.getAsString(context, component, object); 
+0

बहुत बहुत धन्यवाद! यही वही था जो मैं ढूंढ रहा था :) मेरी इच्छा है कि जेएसएफ कक्षाओं में उपयोगी जावाडॉक था। यह निश्चित रूप से मेरे जीवन को बहुत आसान बना देगा। –

+0

javadoc के मेरे उत्तर लिंक में 'अनुप्रयोग # createConverter()' टेक्स्ट 'टेक्स्ट। – BalusC

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