2011-01-13 9 views
0

私はJSF 2.0を実行中ですJSF/Javaの設計に関する質問

私は現在、Contacts.javaという1つのJavaコントローラを持っています。それは連絡先の束を表示し、そのデータを表示するには、「それを開く」ために、コンタクトをクリックすることができたとき、私のアプリケーションの負荷が内部Iは、メンバ変数として格納されたアドレスのリスト

List<Addresses> addresses; 

を持っています。連絡先をクリックすると、contactIdに基づいてリストを取り込むメソッドにcontactIdが渡されます。次に、データが表示されます。

私はまた、リストにアドレスを追加したり、アドレスを削除したり、このcontactIに依存している更新されたものなど、たくさんの機能を持っています。

Contacts.javaを2つのコントローラContacts.javaとAddresses.javaに分割することを検討していました。それは、自分のクラス内にあるはずのアドレスに関係するロジックが多すぎるからです。

私が苦労している問題は、Addressesを扱うすべてのロジックをAddresses.javaに移動すると、コンパイル時に選択されたcontactIdへの参照が何らかの形で必要になることです。

コンパイル時に、アドレスがコンストラクタのリストアドレスに入力されているときに現在のcontactIdを探してコンパイルされます。ただし、ユーザーがアプリケーションで連絡先を選択したときにcontactIdが設定されるため、この時点では設定されません。

これは悪い設計アイデアですか?私はJavaとOOPにはとても新しいので、これらを分ける方法の概念を完全には把握していません。どんな助けもありがとう。

+0

'Addresses'クラス自体はアドレスの束を表しているのですか、それとも単一のアドレスですか? – BalusC

+0

実際にはアドレスを扱うすべてのロジックを表しているので、内部にはメンバー変数List があります。次に、データベースからアドレスを更新、編集、削除するメソッドもあります。リストを更新します。 newtoJSF

+0

'List 'のように 'Addresses'をターゲットにします。 'List

'はより理にかなっています。 – BalusC

答えて

2

一般的には、ビュー/フォームごとに1つのBeanが望ましいですが、非同期リクエストを使用しているかどうか(ajaxかどうか)によっても異なります。データを渡すことに関しては、ソース、ターゲット、および/またはルートに応じていくつかの方法があります。

コンパイル時に、コンストラクターのリストアドレスを入力するときに、現在のcontactIdを探してコンパイルします。ただし、ユーザーがアプリケーションで連絡先を選択したときにcontactIdが設定されるため、この時点では設定されません。

具体的なケースでは、コンストラクタ/ポストコンストラクトがデータをロードする唯一の方法であると思われるようです。本当じゃない。イベント(アクション)メソッドでも行うことができます。例えば。 viewに関連するページで

<h:dataTable value="#{contacts.list}" var="contact"> 
    <h:column> 
    #{contact.name} 
    </h:column> 
    <h:column> 
    <h:commandButton value="View info" action="#{contacts.view(contact)}"> 
    </h:column> 
</h:dataTable> 

そしてContactsバッキングBeanで(あなたが唯一の適切なゲッターとセッターで、List<Address>List<Phone>Contactのプロパティを作成する必要があります)

public String view(Contact contact) { 
    this.contact = contact; 
    contact.setAddresses(addressDAO.list(contact)); 
    contact.setPhones(phoneDAO.list(contact)); 
    return "view"; 
} 

そして、 :

<h:dataTable value="#{contacts.contact.addresses}" var="address"> 
    ... 
</h:dataTable> 
<h:dataTable value="#{contacts.contact.phones}" var="phone"> 
    ... 
</h:dataTable> 

また、JPAを使用している場合は、遅延ロードの恩恵を受けることもできます。しかしそれは物語とデザインの違いです。

+0

連絡先とは何ですか?アドレスと電話番号は、このような2つのアクションメソッドを呼び出すことができますか? 回答ありがとうございました。しかし、私は別のリストの束をロードする必要があります。 – newtoJSF

+0

いいえ、単一のアクションメソッドで両方をロードしてください。あなたの意図はより明確で、アプローチは少し異なります。私は答えを更新しました。 – BalusC

+0

よろしくお願いいたします。 – newtoJSF

関連する問題