2011-04-17 11 views
10

क्या एच के अलावा संसाधन बंडल से संदेशों के पैरामीटर पास करने का कोई सुविधाजनक तरीका है: outputFormat?संसाधन बंडल से संदेशों के लिए पैरामीटर पैरामीटर ** एच के अलावा घटकों को पास करें: आउटपुटफॉर्मैट **

उदाहरण के लिए, यह कानूनी है:

<h:outputFormat value="#{myBundle['parametricMessage']}"> 
    <f:param value="#{myBundle['someParameterValue']}"/> 
</h:outputFormat> 

लेकिन मैं एक बटन के लिए इसकी आवश्यकता है, इस तरह (जो काम नहीं करेगा):

<h:commandButton value="#{myBundle['parametricMessage']}"> 
    <f:param value="#{myBundle['someParameterValue']}"/> 
</h:commandButton> 

बेशक , मैं उपयोग कर सकते हैं बटन के बजाए लिंक करें, और मैं इसे एक प्रबंधित बीन में एक संपत्ति के माध्यम से बना सकता हूं, लेकिन इस प्रश्न में मैं सुविधाजनक बटन का उपयोग करने के लिए सुविधाजनक तरीका ढूंढ रहा हूं ...

मैं RichFaces 3.3.3, जेएसएफ 2, फेसलेट का उपयोग कर रहा हूं।

उत्तर

13

इस दृष्टिकोण के बारे में कैसे?

EL expression allow you to define a function आप पहले ईएल अभिव्यक्ति के फ़ंक्शन को परिभाषित करते हैं, जो संसाधन बंडल, इसकी संदेश कुंजी और प्लेसहोल्डर पैरामीटर स्वीकार करता है और हल संदेश को आउटपुट करता है।

<h:commandButton value="#{f:geti18nMsg(myBundle , parametricMessage, someParameterValue)}"/> 
+0

यह काम नहीं करता है जब आप का उपयोग कर रहे हैं क्योंकि आप जो भी पारित कर रहे हैं वह ResouceBundleMap है और ResouceBundle नहीं है। यदि आप का उपयोग करते हैं तो आप ResouceBundle को मानचित्र <स्ट्रिंग, स्ट्रिंग> में बदल सकते हैं और फिर आप इसे .get (msgKey) पर कर सकते हैं। – Lyrion

0

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

इसके लिए कुछ अतिरिक्त काम करने की आवश्यकता है, लेकिन समस्या हल करती है और उस समय के लायक है।

4

इस प्रयास करें::

public static String geti18nMsg(ResourceBundle bundle ,String msgKey, String paramValue) { 
    String msgValue = bundle.getString(msgKey); 
    MessageFormat messageFormat = new MessageFormat(msgValue); 
    Object[] args = {paramValue}; 
    return messageFormat.format(args); 
} 

फिर <h:commandButton> में हल संदेश प्राप्त करने के लिए इस समारोह फोन

<h:commandButton> 
    <h:outputFormat value="#{myBundle['parametricMessage']}"> 
     <f:param value="#{myBundle['someParameterValue']}"/> 
    </h:outputFormat> 
</h:commandButton> 

Btw, आप यही चाहते करता है और यह भी लिखने के लिए होने टाल बैकिंग बीन कोड।

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