2013-10-19 13 views
6

してJava Beanに複数値フィールドを接続しようとすると:種類の不一致私はこのコードを持っているのXPages

<xe:formTable id="formTable1" formTitle="User Roles"> 
    <xe:formRow id="formRow1" label="Category Admin"> 
     <xe:djextNameTextBox id="edtCatAdmin" multipleSeparator="," value="#{exhibitorInfo.categoryAdmin}" /> 
     <xe:namePicker id="namePicker1" for="edtCatAdmin"> 
      <xe:this.dataProvider> 
       <xe:namePickerAggregator> 
        <xe:this.dataProviders> 
         <xe:dominoNABNamePicker addressBookSel="first" groups="false" people="true" /> 
         <xe:dominoViewNamePicker labelColumn="mailinName" viewName="lkp_MailIn" label="Group Mailboxes" /> 
        </xe:this.dataProviders> 
       </xe:namePickerAggregator> 
      </xe:this.dataProvider> 
     </xe:namePicker> 
    </xe:formRow> 
</xe:formTable> 

目標はただ多値名ピッカーを保存することです、それはかなりのJava Bean内valiesですドキュメントフィールド。したがって、名前ピッカーはxe:djextNameTextBoxを指して名前を簡単に削除でき、xe:djextNameTextBoxはBeanにバインドされています。このJavaコードを使用して

は -

public void setCategoryAdmin(ArrayList<String> categoryAdmin) { 
    System.out.println("Set CategoryAdmin - List"); 
    this.categoryAdmin = categoryAdmin; 
} 


public void setCategoryAdmin(String categoryAdmin) { 
    System.out.println("Set CategoryAdmin - String"); 
    if (!this.isBlankString(categoryAdmin)) { 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add(categoryAdmin); 
     this.setCategoryAdmin(al); 
    } 
} 

複数の値のために正常に動作するように見えます。単一のvaluleだけが使用されている場合は、エラーが発生します。java.lang.IllegalArgumentException:引数のタイプの不一致

これは、複数値の配列と単一値の文字列を返すXPagesと関係があります。しかし、私はどのようにこの仕事をするか分からない。

アドバイスをいただければ幸いです!ありがとう!!

--UPDATE-- Camacがリンクしているブログポストのこのコードが動作するようです。私は同じ問題を有し、かつ、このリンクからヒントを使用して覚えて

public Object getCategoryAdmin() { 
    System.out.println("getCategoryAdmin"); 
    return this.categoryAdmin; 
} 


@SuppressWarnings("unchecked") 
public void setCategoryAdmin(Object inputMulti) { 
     this.categoryAdmin = this.translateToVector(inputMulti); 
    } 

@SuppressWarnings("unchecked") 
public Vector translateToVector(Object object){ 
if(object instanceof String){ 
    Vector list = new Vector(); 
    list.add(object); 
    return list; 
} 

if(object instanceof List){ 
    return (Vector)object; 
} 

return null; 
} 
+3

XPageはBeanメソッドのオーバーロードを理解しておらず、常にリスト引数を持つものを選択するように見えます。カマクの答えが解決策です。 XPageが常にStringまたはListを返すといいですか? –

+2

@PanuHaaramo:これはJSF固有の問題です。 ELは* Class *を呼び出してメソッドを解決するため、最初のPublic Setterのみが使用されます。 * getMethods()*と検索された名前で見つかった最初のパブリックメソッドを使用します。別のアプローチは、Objectを扱うパブリックメソッドを持ち、プライベートセッターを呼び出すことです。その後、オーバーロードは期待通りに機能します。 –

+0

このxpagesの状況はどれほど迷惑ですか!あなたは私の日を救った、ありがとう。私が検討していた(しかし実装していない)もう一つの答えは、何とか提出された文字列の最後に空白の値を追加して、常に配列にすることでした。あなたのコードが空白を無視するようにしてください。しかしそれを試していない。 – user2808054

答えて

関連する問題