2009-05-24 6 views
5

RichFaces suggestionBoxを使用すると、テキスト入力を持つページから複数のidまたは値をどのようにしてsuggestionBoxバッキングBeanに渡すことができます。選択された州内の提案都市のリストを表示しますか?ここに私のautoCompleteメソッドです。richfaces suggestionBoxバッキングBeanに追加の値を渡します

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; 
} 

(Faceletsのm:textFormRow中)h:inputTextのテキストですページ、Objectを示唆、から渡された一つの値があるあなたが見ることができるように以前のページで

<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

あなたは状態を選択したいので、suggestionboxはその州の郊外のみを提案しますか?状態を選択するコードはどのように見えますか? – Mark

答えて

0

RichFaces suggestionBox demoを見ましたか?例の下にソースを表示するリンクがあります。

編集:あなたはsuggestionBoxにおけるユーザーの種類の前に、あなたのBean内の状態の値を必要とするよう

が鳴ります。 RichFaces ajaxサポートを使用してstateの値をBeanに渡すので、オートコンプリートメソッドが呼び出されたときに、ユーザーがページで選択した郊外のリストを作成する状態があります。

+0

richfacesデモのコードを使用しました。 – Martlark

1

<f:parameterタグを<rich:suggestionboxの中に使用していますか?

+0

これは正しい方向に私を指摘しましたが、答えではありません。役に立つ情報が含まれていますが、 – PMorganCA

3

(免責事項:私は質問は長い時間前にむしろ頼まれたことを認識してんだけど、多分これは、同様の問題を持つ人をお手伝いします...)

似たようなを扱うこのブログ記事をご覧ください:RichFaces - SuggestionBox and hidden field

鍵は<f:setPropertyActionListener value="#{...}" target="#{...}">が入り込んだ<a4j:support event="onselect" ajaxSingle="true">です。これは、onselectがSuggestionBoxに対してトリガーされたときにバッキングBeanの追加値を設定するために使用できます。私は(とオートコンプリート)を表示SuggestionBoxを作成するために管理し、このアプローチでは

顧客のが、選択時に(いくつかのプロパティを持つ、IDで識別)全体顧客オブジェクトを設定Bean用。

+0

これは基本的に同じ問題に関する別の答えです:http://stackoverflow.com/questions/1681559/richfaces-suggestionbox/1687031#1687031 – Jonik

0

<f:parameterタブは、rich:suggestionboxの中で使用できます。私の仕事は、リスト要素のある属性に従ってリストをフィルタリングしていました。その属性が無視されることもありました。時には、柑橘系の果実のリストだけが必要な場合もあります。時には、利用可能なフルーツのリストも必要です。ページで

<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> 

私は1つのリストには、特別な濾過しなければならなかった場合は知っていたクラス(Basket)、およびリストを構築し、別のクラス(ListBuilder)を有していました。Basket

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

: - たとえば、あなたがしたいコントロールで簡単なフォームを投稿

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; 
} 
関連する問題