2012-10-01 11 views
7

में "स्थिरांक" -class होने के बाद मैं जेएसएफ/प्राइमफेस का उपयोग कर एक वेब-एप्लिकेशन बना रहा हूं। मुझे "स्थिरांक" -क्लास होना चाहिए, यानी एक वर्ग जिसमें स्थिरांक शामिल होंगे। ये स्थिरांक मुख्य रूप से नेविगेशन कमांड होते हैं जिनका उपयोग पूरे एप्लिकेशन में किया जाएगा। मैं ऐसा करने का कारण एक विज्ञापन-आधारित आधार पर तत्काल स्ट्रिंग्स से बचने के लिए है।जेएसएफ

मैं इसे कैसे प्राप्त करूं, जिससे बैकिंग बीन्स और एक्सएचटीएमएल फाइलों दोनों से स्थिरांक उपलब्ध हो सके?

मैंने @ApplicationScoped का उपयोग करने और सिंगलटन-पैटर्न (सिंगलटन क्लास) का उपयोग करने का प्रयास किया है, लेकिन मैं इसे स्कोप समस्याओं के कारण काम करने में असमर्थ हूं।

या शायद मैं गलत दृष्टिकोण का उपयोग कर रहा हूं। किसी भी विचार/सुझाव स्वागत है।

+0

आपके पास 'सार्वजनिक स्थैतिक अंतिम स्ट्रिंग पेज 1 = "पृष्ठ 1.xhtml" के साथ कक्षा क्यों नहीं है। याद रखें कि इस कक्षा का उपयोग आपके प्रबंधित बीन्स में किया जाएगा। यदि आप अपने जेएसएफ कोड में इनमें से किसी भी मूल्य का उपयोग करने जा रहे हैं, तो आप कक्षा में @ एप्प्लिकेशंसस्कोप जोड़ सकते हैं और 'स्ट्रिंग' के लिए गेटर्स का उपयोग करेंगे। –

+0

क्या आप एक उदाहरण के साथ समझा सकते हैं? – javaMS

उत्तर

12

मैं इसे कैसे प्राप्त करूं, जिससे बैकिंग बीन्स और एक्सएचटीएमएल फाइलों दोनों से स्थिरांक उपलब्ध हो सके?

बैकिंग बीन्स में, यह स्पष्ट रूप से आसान है। चूंकि वे सिर्फ जावा कक्षाएं हैं, यह "सामान्य" जावा तरीके से अलग नहीं है। आप enum एस या public static final फ़ील्ड का उपयोग कर सकते हैं। विचारों में, यह एक अलग कहानी है। आने वाले संस्करण 3.0 तक, ईएल अर्थात् किसी भी तरह से स्थिरांक का समर्थन नहीं करता है।

मैं enums का उपयोग करने का सुझाव दूंगा क्योंकि ईएल के पास स्ट्रिंग तुलना में उनके लिए निहित समर्थन है। यह कोई संकलन/रनटाइम प्रकार सुरक्षा जांच नहीं करता है, लेकिन आप enum नाम को स्ट्रिंग के रूप में उपयोग कर सकते हैं। जैसे

<h:someComponent ... rendered="#{order.status == 'SHIPPING'}" /> 

आप और अधिक आत्म दस्तावेज़ीकृत कोड और एक क्रम की जांच (कोई, एक compiletime जांच संभव नहीं है) पसंद करते हैं, तो आप OmniFaces<o:importConstants> उपयोग करने पर विचार कर सकता है।

<o:importConstants type="com.example.OrderStatus" /> 
<h:someComponent ... rendered="#{order.status == OrderStatus.SHIPPING}" /> 

यह आईएमओ केवल थोड़ी अधिक बेकार है। हालांकि रनटाइम चेक विकास के दौरान अच्छा है। एक टाइपो आसानी से पर्यवेक्षित है।

आने वाले ईएल 3.0 (JSR-341, जावा ईई 7 का हिस्सा) में, स्थिरांक को उसी तरह संदर्भित करना संभव है। यह भी देखें How to reference constants in EL? इसे केवल स्थिरांक के प्रोग्रामेटिक आयात की आवश्यकता है क्योंकि इसके लिए कोई मानक जेएसपी/फेसलेट टैग नहीं है।

+0

मैंने enums का उपयोग किया है और वे बीन-स्तर पर ठीक काम करते हैं। हालांकि, जब मैं enum आयात करने के लिए omnifaces का उपयोग करने की कोशिश करता हूं तो मुझे अपवाद मिलता है। मेरे विचार में यह है: और तो मेरे पास सार्वजनिक स्ट्रिंग ऐड (ऑब्जेक्ट ऑब्जेक्ट, ऑब्जेक्ट कमांड) {(...) नेविगेशन हेल्पर एनएच = (नेविगेशनहेल्पर) कमांड है; बीन में अपवाद java.lang.NullPointerException – javaMS

+0

ठीक है, मुझे समस्या मिली। मुझे को -block में रखना होगा। मैंने इसे इसके बाहर रखा था जिससे इस अपवाद का कारण बन गया। क्या आप समझ सकते हैं कि आप बेकार से क्या मतलब है? – javaMS

+0

टैग वास्तव में दृश्य के अंदर रखा जाना चाहिए, बाहर नहीं। यदि आप एक मास्टर टेम्पलेट का उपयोग कर रहे हैं, तो आप इसे वहां भी रख सकते हैं, ताकि आपको इसे सभी टेम्पलेट क्लाइंट पर दोहराने की आवश्यकता न हो। "बेकार" का अर्थ यहां "पर्याप्त सरल नहीं है"। मुझे सादगी पसंद है। – BalusC