2011-11-16 20 views
6

मुझे अलग-अलग हिस्सों से बना उपयोगकर्ता चुने गए कॉन्फ़िगरेशन को सहेजने का एक तरीका चाहिए। प्रत्येक भाग को एक प्रबंधित पृष्ठ (एक प्रति भाग प्रकार) द्वारा प्रदान की गई सूची से अलग पृष्ठ पर चुना जाता है।सत्र स्कैन किया गया प्रबंधित बीन बनाम स्टेटफुल बीन बनाम httpsession

अब मजेदार हिस्सा है। मेरे पास उपरोक्त सभी पृष्ठों के लिए टेम्पलेट में <ui:include> के साथ डाले गए सभी पृष्ठों के लिए एक डेटाटेबल, हमेशा दिखाई देने वाला है। मैं इस डेटा को विकल्पों में बदलाव या विकल्पों को प्रतिबिंबित करना चाहता हूं जो उपयोगकर्ता भागों के लिए करते हैं। हो सकता है कि इस तरह के कॉन्फ़िगरेशन को डीबी में भी बचाएं, लेकिन अब यह मेरी प्राथमिकता नहीं है। यह एक शॉपिंग कार्ट की तरह है, लेकिन मेरे पास अलग-अलग उपयोगकर्ता नहीं हैं (यह केवल एक प्रोटोटाइप है), इसलिए कोई लॉगिन आवश्यक नहीं है।

यह जावा, जेएसएफ, ईजेबी के साथ मेरा पहला मुठभेड़ है, मुझे नहीं पता कि कौन सा सबसे अच्छा तरीका होगा। मैंने अलग-अलग विकल्पों के बारे में पढ़ा है, और मुझे लगता है कि किसी भी तरह से काम करेगा, इसलिए मुझे कुछ याद आ रहा है।

मैं किसी को सही दिशा में इंगित करने की सराहना करता हूं।

उत्तर

11

आप गाड़ी की जानकारी रखने के लिए एक सत्र स्कोप्ड प्रबंधित बीन का उपयोग कर सकते हैं। यहाँ एक बुनियादी किकऑफ़ उदाहरण है (उत्पादों और जिम्मेदार नहीं मात्रा नकल है, यह सिर्फ समग्र विचार दे करने के लिए):

@ManagedBean 
@SessionScoped 
public class Cart { 

    private List<Product> products = new ArrayList<Product>(); 

    public void add(Product product) { 
     products.add(product); 
    } 

    public void remove(Product product) { 
     products.remove(product); 
    } 

    public List<Product> getProducts() { 
     return products; 
    } 

} 

आप जा सकते थे (आप एक Map<Product, Integer> या Map<Product, Order> मात्रा ट्रैक करने के लिए इस्तेमाल कर सकते हैं)

<h:dataTable value="#{cart.products}" var="product"> 
    <h:column>#{product.description}</h:column> 
    <h:column><h:commandButton value="Remove" action="#{cart.remove(product)}" /></h:column> 
</h:dataTable> 

आप किसी अन्य तालिका से गाड़ी के लिए उत्पादों को जोड़ सकता है इस प्रकार है::

तो इस प्रकार गाड़ी प्रदर्शित 0
<h:dataTable value="#{products.list}" var="product"> 
    <h:column>#{product.description}</h:column> 
    <h:column><h:commandButton value="Add" action="#{cart.add(product)}" /></h:column> 
</h:dataTable> 

एक स्टेटस ईजेबी केवल तभी दिलचस्प है जब आप इसे विभिन्न एपीआई/फ्रेमवर्क या यहां तक ​​कि दूरस्थ ग्राहकों में वेबपैप में कहीं और इस्तेमाल करने में सक्षम होना चाहते हैं, या जब आप वस्तुओं को लॉक करने के लिए दृढ़ता संदर्भ का उपयोग करना चाहते हैं वर्तमान में कार्ट में, ताकि अन्य ग्राहक इसे कार्ट में नहीं जोड़ सकें। HttpSession जेएसएफ स्टोर सत्र के रूप में प्रासंगिक नहीं है क्योंकि वैसे भी प्रबंधित बीन्स स्कैन किया गया है और आप कच्चे सर्वलेट एपीआई को जेएसएफ के कवर के बाहर से बाहर नहीं करना चाहते हैं।

+1

धन्यवाद youuuuu। यह हर बार क्रिसमस की तरह है जब आप मेरे सवालों में से एक का जवाब देते हैं – glasspill

+0

आपका स्वागत है। – BalusC

+0

और यदि आपको 'कक्षा' जैसे त्रुटि मिलती है javax.faces.component.html.HtmlDataTable 'में' var' 'का नाम नहीं है, जैसा कि आपने शायद दूसरे नाम के लिए समान नाम का उपयोग किया है अन्यत्र, यह वर्तमान के साथ विवादित है और आप कारणों की तलाश में उम्र व्यतीत करेंगे। – glasspill