2012-05-03 16 views
1

私はちょうどjava ee 6を学んでいます。私の目標は、編集リストを作成し、id、名前文字列、および説明だけで作られた簡単なエンティティを削除する簡単なアプリケーションです文字列。私はちょうどいくつかのコードを見るためにこれに続いたhttp://netbeans.org/kb/docs/web/jsf20-crud.html私はnetbeansの代わりに日食を使用し、ガラス魚の代わりにjboss 7。まあ....それは動作します。エンティティの関係とエンティティを変換するための戦略

ここで私のエンティティは「ユーザー」だと思います(ID、ユーザー名、パスワード)。 「UserRole」エンティティを追加します。ここにはid、rolenameがあります。 次に、OneToManyとManyToOneの関係を設定します。

したがって、ユーザー作成ページでどのように役割の入力を管理できますか? Netbeans crud suggested codeは、すべての役割IDを値として持つselectonemenu(選択ドロップダウンリスト)です。フォーム・サブミットでは、ロール・コントローラ(jsf管理Bean)の静的内部クラス「roleconverter」(facesconverter)が、選択されて送信されたロールID文字列を受け取り、ejb-daoを使用して対応するロールをルックアップします。

私の質問は以下のとおりです。

  • 私は理解していますか?私が上に書いたものは正しいですか?
  • は、この方法でコンバータを使用するのが最善のベストプラクティスですか?このような単純で再帰的なタスクには、より良い解決策はありませんか?
  • エンティティのコンバーターはエンティティ名を除いてすべて同じですが、一般的なコンバーターなどで複製を削除するにはどうすればよいですか?
  • jsf 2で多対多に管理するためのあなたの意見では最高のGUIは何ですか? (複数の役割を持つユーザーなど)

答えて

0

これは正しいです。 HTMLは基本的に1つ大きなであり、HTTPリクエストのパラメータはすべてStringですので、コンバータが必要です。 HTMLとHTTPは、具体的なJavaオブジェクトを理解したり、渡したりしません。彼らはウェブサーバーのメモリにのみ住んでいます。 HTMLレスポンスを生成し、HTTPリクエストパラメータを適切に解析するには、実際にSomeRandomEntityStringの間で変換できる必要があります。

変換器については、DRYではなく、すべてのエンティティがgetterとsetterと共に定義されている共通の基本エンティティを拡張しており、汎用DAOを使用している場合は、この。このような何か(些細precheckingとConverterExceptionを省略取り扱い):

@Override 
public String getAsString(FacesContext context, UIComponent component, Object value) { 
    if (value == null) { 
     return null; 
    } 

    Long id = ((BaseEntity) value).getId(); 
    return String.valueOf(id); 
} 

@Override 
@SuppressWarnings("unchecked") 
public Object getAsObject(FacesContext context, UIComponent component, String value) { 
    if (value == null) { 
     return null; 
    } 

    Long id = Long.valueOf(value); 
    Class<BaseEntity> type = (Class<BaseEntity>) component.getValueExpression("value").getType(context.getELContext()); 
    return genericDAO.find(id, type); 
} 

あるいは、<h:selectOneMenu>の特定のケースでは、あなたも<f:selectItem(s)>のオブジェクト値に基づいて変換する変換器を使用することができます。しかしこれはまったく些細なことではありません。 JSF2コンポーネント・ライブラリーOmniFacesは、そのようなものにはSelectItemsConverterが含まれています。興味があれば、そのソースコードを確認したいかもしれません。

関連する問題