2009-06-27 6 views
0

私は以下にいくつかの問題を抱えている単純なJSFアプリケーションの作成問題: 私のentities.controller.EntityNameManagerクラスには、ComboBoxを取り込むために使用できるgetEntityNameSelectList()メソッドが含まれています。エンティティを取得するメソッドにはwhere句がないため、これはすべてのエンティティを処理して表示します。 このメソッドは自動的に作成されました。カスタムgetEntityNameSelectList()が失敗します

私はセッションスコープ内の変数に基づいてオプションをフィルタリングする2番目の類似したメソッドを使いたいと思います。これを行うために、元のメソッドをコピーし、getEntityNameSelectListByUser(User theUser)に名前を変更し、UserIdによって実際にフィルタリングするメソッドにデータベースを照会するメソッドを変更しました。

ただし、ブラウザでページを読み込もうとすると、コントローラクラスに「EntityNameSelectListByUser」プロパティがないことを示すエラーが表示されます。私は、新しいメソッドがパラメータを期待しているので、それが見つからないと仮定します。パラメータまたはセッションスコープのユーザIDを認識できる方法はありますか?

答えて

0

ELのパラメータのサポートは、次のメンテナンスリリースJSR 245(発表here;実装here)の予定です。


あなたがJEE6を待つことを望んでいないと仮定すると、この制限を克服する方法がいくつかあります。これらのアプローチは、POJO管理Beanの観点から定義されているため、必要に応じてEJBに合わせてください。

1.

バッキングBeanでセッションルックアップや機能の呼び出しを行います。

public String getFoo() { 
    FacesContext context = FacesContext 
     .getCurrentInstance(); 
    ExternalContext ext = context.getExternalContext(); 
    String bar = (String) ext.getSessionMap().get("bar"); 
    return getFoo(bar); 
    } 

例は、バインディング:

#{paramBean.foo} 

2.

は(定義されたEL functionを使用しますTLD内でpublic staticメソッドにマップされます)。

public static String getFoo(ParamBean bean, String bar) { 
    return bean.getFoo(bar); 
    } 

例バインディング:

public Map<String, String> getFooMap() { 
    return new HashMap<String, String>() { 
     @Override 
     public String get(Object key) { 
     return getFoo((String) key); 
     } 
    }; 
    } 

#{baz:getFoo(paramBean, bar)} 

関数(ハックのビットと一つのパラメータに限定されるもの)を呼び出すためにマップクラスを覆します結合例:

#{paramBean.fooMap[bar]} 
関連する問題