2009-05-24 20 views
5

का उपयोग करते समय अतिरिक्त मूल्यों को पारित करते हुए रिचफ़ेस suggestionBox का उपयोग करते समय आप suggestionBox बैकिंग बीन में टेक्स्ट इनपुट के साथ पृष्ठ से एक से अधिक आईडी या मान कैसे पारित कर सकते हैं। यानी: किसी चयनित राज्य के भीतर सुझाए गए शहरों की सूची दिखाने के लिए? यहां मेरी autoComplete विधि है।समृद्ध सुझाव सुझाव बीन

public List<Suburb> autocomplete(Object suggest) 
{ 
    String pref = (String) suggest; 
    ArrayList<Suburb> result = new ArrayList<Suburb>(); 

    Iterator<Suburb> iterator = getSuburbs().iterator(); 
    while(iterator.hasNext()) 
    { 
     Suburb elem = ((Suburb) iterator.next()); 
     if((elem.getName() != null && elem.getName().toLowerCase().indexOf(pref.toLowerCase()) == 0) || "".equals(pref)) 
     { 
      result.add(elem); 
     } 
    } 
    return result; 
} 

पेज, Object सुझाव है, जो h:inputText का पाठ (faceLets m:textFormRow में) है से पारित एक मूल्य नहीं होता है जैसा कि आप देख सकते हैं

<m:textFormRow id="suburb" label="#{msgs.suburbPrompt}" 
    property="#{bean[dto].addressDTO.suburb}" 
    required="true" maxlength="100" size="30" /> 

<rich:suggestionbox height="200" width="200" usingSuggestObjects="true" 
    suggestionAction="#{suburbsMBean.autocomplete}" var="suburb" for="suburb" 
    fetchValue="#{suburb.name}" id="suggestion"> 
    <h:column> 
     <h:outputText value="#{suburb.name}" /> 
    </h:column> 
</rich:suggestionbox> 

पेज में इससे पहले आप चुन सकते हैं एक राज्य जिसे मैं उपनगरों की सूची को कम करने के लिए उपयोग करना चाहता हूं जो सुझाव बॉक्स प्रदर्शित करता है।

+0

आप आपको बस इतना करना कोशिश कर रहे हैं के बारे में अधिक स्पष्ट रूप से हो सकता है - नियंत्रण आप चाहते हैं के साथ एक सरल फार्म पोस्टिंग उदाहरण के लिए, उपयोगकर्ता इनपुट डेटा के रूप में घटनाओं के अनुक्रम का उपयोग और वर्तनी करने के लिए। – McDowell

+0

तो आप राज्य का चयन करना चाहते हैं, तो सुझाव बॉक्स केवल उस राज्य के उपनगरों का सुझाव देगा? राज्य का चयन करने के लिए कोड कैसा दिखता है? – Mark

उत्तर

0

क्या आपने इस RichFaces सुझाव बॉक्स demo पर अभी तक देखा है? स्रोत देखने के लिए उदाहरणों के तहत लिंक हैं।

संपादित करें: जैसे आप suggestionBox में प्रकार उपयोगकर्ता से पहले अपने सेम में राज्य के मूल्य की जरूरत है

लग रहा है। मैं बीन को राज्य के मूल्य को पारित करने के लिए RichFaces AJAX समर्थन का उपयोग करूंगा ताकि जब स्वत: पूर्ण विधि कहा जाता है, उस स्थिति में उपयोगकर्ता को पृष्ठ पर चयनित उपनगरों की सूची तैयार करने के लिए चुना जाता है।

+0

मैंने समृद्ध डेमो से कोड का उपयोग किया है। – Martlark

1

<rich:suggestionbox के अंदर <f:parameter टैग का उपयोग कर रहा है?

+0

हालांकि यह मुझे सही दिशा में इंगित करता है, यह एक जवाब नहीं है। इसमें उपयोगी जानकारी होती है, हालांकि – PMorganCA

3

(अस्वीकरण: मुझे पता है कि प्रश्न नहीं बल्कि लंबे समय पहले कहा गया था, लेकिन शायद यह एक ऐसी ही समस्या के साथ किसी की मदद करेंगे हूँ ...)

चेक बाहर इस ब्लॉग पोस्ट जो कुछ इसी तरह के साथ सौदों : RichFaces - SuggestionBox and hidden field

<a4j:support event="onselect" ajaxSingle="true"> के अंदर लिपटे <f:setPropertyActionListener value="#{...}" target="#{...}"> का उपयोग करना है। इसका उपयोग बैकिंग बीन के लिए अतिरिक्त मान सेट करने के लिए किया जा सकता है जब onselect सुझाव बॉक्स के लिए ट्रिगर किया गया है।

इस दृष्टिकोण के साथ

मैं एक SuggestionBox को प्रदर्शित करता है कि (और पूर्ण हो जाता है) ग्राहकों की नाम बनाने में कामयाब रहे, लेकिन चयन पर एक पूरी ग्राहक वस्तु (कई गुणों के साथ, एक आईडी से पहचान) सेट एक सेम के लिए।

+0

मूल रूप से एक ही समस्या के बारे में एक और SO उत्तर है: http://stackoverflow.com/questions/1681559/richfaces-suggestionbox/1687031#1687031 – Jonik

0

आप rich:suggestionbox के अंदर <f:parameter टैब का उपयोग कर सकते हैं। मेरा कार्य सूची तत्व की कुछ विशेषता के अनुसार एक सूची फ़िल्टर कर रहा था, जहां कभी-कभी उस विशेषता को अनदेखा किया जा सकता था। जैसे, कभी-कभी मैं केवल साइट्रस फल की एक सूची चाहता हूं, और कभी-कभी मैं उपलब्ध फल की पूरी सूची चाहता हूं।

पेज में:

<rich:suggestionbox usingSuggestObjects="true" 
     suggestionAction="#{listBuilder.autocompleteFilterFruit('')}" var="ind" 
     for="fruitInput" fetchValue="#{fruit.name}" id="suggestion" > 
    <f:param name="constrainInd" value="#{basket.isConstrainedToCitrus}" /> 

    ... 

</rich:suggestionbox> 

मैं एक वर्ग (Basket) है कि यदि सूची विशेष फिल्टर्ड होना ही था जानता था, और किसी अन्य वर्ग (ListBuilder) उस सूची का निर्माण किया था।

Basket में:

public Boolean getIsConstrainedToCitrus() 
{ 
    return new Boolean (logic that answers "is this basket for citrus only"); 
} 

ListBuilder में:

public List<Fruit> autocompleteFilterFruit (Object arg) 
{ 
    List<Fruit> rtnList = new ArrayList<Fruit>(); 

    String suggestion = (String) arg; 

    // get the filter control that the page retrieved from the Basket 
    // 
    Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    boolean isConstrainedToCitrus = "true".equals (params.get ("constrainInd")); 

    // allFruit is a pre-initialized list of all the available fruit. use it to populate the return list according 
    // to the filter rules and matches to the auto-complete suggestions 
    for (Fruit item : allFruit) 
    { 
     if ((!isConstrainedToCitrus || item.isCitrus()) && item.name.startsWith(suggestion)) 
     { 
      rtnList.add (item); 
     } 
    } 
    return rtnList; 
} 
संबंधित मुद्दे