2009-05-08 10 views
8

मैं एक Richfaces 'picklist का उपयोग कर रहा हूं और मैं अपने बैकिंग बीन से SelectItems की एक सूची के साथ दाएं तरफ पैनल को पॉप्युलेट करना चाहता हूं।एक richfaces picklist के दाहिने तरफ कैसे पॉप्युलेट करें?

बाएं तरफ पॉप्युलेट करना बैकिंग बीन से कोई समस्या नहीं है, हालांकि, दाएं हाथ की ओर समस्याग्रस्त है।

यह वही मैं वर्तमान में

<h:outputText value="Roles" /> 
<rich:pickList showButtonsLabel="false"> 
    <f:selectItems value="#{Bean.allRoles}" /> 
</rich:pickList> 

संपादित है:

तो मेरे पास है भूमिकाओं 'एक', 'बी', 'सी', और 'डी'।

उपयोगकर्ता की भूमिका 'ए' और 'डी' है, इसलिए 'ए' और 'डी' दाएं तरफ पैनल पर होना चाहिए और 'बी' और 'सी' बाएं तरफ पैनल पर होना चाहिए।

संपादित करें:

आगे स्पष्टीकरण।

मेरे पास उपयोगकर्ता के लिए तीन सूचियां हैं।

  1. सभी posible भूमिकाओं (एक घ के माध्यम से)
  2. सभी भूमिकाओं उपयोगकर्ता (एक और घ) का हिस्सा है
  3. सभी भूमिकाओं उपयोगकर्ता
का हिस्सा (ग b और) नहीं है

सभी सूचियों में डेटा प्रकार ArrayList<SelectItem> है।

मुझे सूची संख्या 1 और सूची संख्या 2 के बीच व्यक्तिगत भूमिकाओं को स्थानांतरित करने की क्षमता की आवश्यकता है और फिर भूमिकाओं के नए सेट को सहेजें। मैंने सोचा कि पिकलिस्ट नौकरी के लिए सबसे अच्छी समृद्ध वस्तु होगी।

उत्तर

3

आप इस कोड हैं:

<h:outputText value="Roles" /> 
<rich:pickList showButtonsLabel="false" value="#{bean.chosenRoles}"> 
    <f:selectItems value="#{Bean.allRoles}" /> 
</rich:pickList> 

और अपने सेम में आप चाहते हैं:

private String[] chosenRoles; 

+ getter/setter 

जब भी आप डिफ़ॉल्ट भूमिकाएं बनाना चाहते हैं तो आप केवल चयनित भूमिकाओं को जोड़ते हैं nRoles सरणी (उदाहरण के लिए बीन कन्स्ट्रक्टर में)। इस तरह चुने गए रोल में हमेशा पिकलिस्ट के दाईं ओर तत्व होते हैं, जबकि बाईं तरफ के तत्व सरणी में नहीं होते हैं।

आशा है कि इससे मदद मिलती है!

+1

क्यों स्ट्रिंग []? क्या यह कनवर्टर प्रदान किए गए सूची नहीं हो सकता है? –

0

selectItem के मान की सरणी में pickList का मान सेट करें।

तुम जो भी दाहिने हाथ की ओर के साथ प्रारंभ करें, फिर मूल रूप से बस Picklist का डिफ़ॉल्ट मान होगा:

<rich:pickList value="#{aBean.rightSideValues}"> 
     <f:selectItems value="#{aBean.leftSideValues}"/> 
    </rich:pickList> 
+0

मैं इसे बाहर कोशिश कर रहा हूँ ... मैं एक त्रुटि हो रही है: java.lang.IllegalArgumentException: मान स्ट्रिंग धन्यवाद और मैं नई चीजें कोशिश कर रखना नहीं है। –

+0

क्षमा करें। आप वास्तव में इसे selectItem का * मान * होना चाहते हैं, न कि selectItem स्वयं। –

6

ऐसा लगता है कि मुझे समाधान मिला।

<rich:pickList value="#{aBean.rightSideValues}"> 
     <f:selectItems value="#{aBean.leftSideValues}"/> 
</rich:pickList> 
  • "#{aBean.rightSideValues}" सूची या ऑब्जेक्ट की श्रेणी इंगित करना चाहिए। इन मूल्यों के साथ पिक सूची के दाएं तरफ पॉप्युलेट किया जाएगा।

  • #{aBean.leftSideValues} SelectItem वस्तु की सूची में इंगित करना चाहिए।

एक नोटिस - SelectItem वस्तु "#{aBean.rightSideValues}" से वस्तुओं के साथ बनाया जाना चाहिए।

उदाहरण

class ABean{ 
    ... 
    List<SomeObject> getRightSideValues(){ 
    ... 
    } 

    List<SelectItem> getLeftSideValues(){ 
     List<SomeObjects> someObjects = getAllAvailableObjects(); 
     List<SelectItem> sItems = new ArrayList<SelectItem>(); 
     for(SomeObject sObj : someObjects){ 
      SelectItem sItem = new SelectItem(sObj, sObj.toString()); 
      sItems.add(sItem); 
     } 
     return sItems; 
} 

सूचना है कि SelectItem पहला तर्क लेता है और इस तर्क SomeObject के संदर्भ में है। आंतरिक में अमीर चेहरे आप पाठ के अलावा अन्य मूल्यों की जरूरत है विधि

SomeObject.equals()

+0

+1 हमें सूचियों के निर्माण की पूरी प्रक्रिया का एक बहुत पूर्ण स्पष्टीकरण देने के लिए, और ऑब्जेक्ट्स के बीच तुलना, जो ** ** यहां तक ​​कि ** आधिकारिक दस्तावेज में निर्दिष्ट नहीं है (http://docs.jboss.org/richfaces /latest_3_3_X/en/devguide/html_single/index.html)। धन्यवाद! –

1

देखें आरएफ 4.3.3 और शायद पहले के रूप में, भी, आप भी अपने मॉडल वर्ग (इकाई सेम) के हैश विधि ओवरराइड करने के लिए की जरूरत है। तो, केवल आपके कनवर्टर के लिए बराबर विधि को ओवरराइड करना पर्याप्त नहीं है। निम्नलिखित मेरे और मेरे पब थ्रेड इकाई बीन के लिए काम किया।

@Override 
    public boolean equals(Object obj) { 
     if (obj == null) 
      return false; 
     if (!(obj instanceof PubThread)) 
      return false; 
     PubThread objectToCheck = (PubThread) obj; 
     boolean isShallowCopy = (this.id.equals(objectToCheck.id)); 
     return isShallowCopy; 
    } 

    @Override 
    public int hashCode() { 
     return (this.id.hashCode()); 
    } 
संबंधित मुद्दे