2011-12-20 5 views
1

私は(最終的に)私がそれが動作するように質問フォームを作ることができました。最後の部分はまだ失われています:質問が属するカテゴリ。質問の永続化を管理する質問ハンドラクラスを作成しました。クラスの他のメソッドと一緒に入れるべきかどうか疑問です。すべてのカテゴリを抽出して表示できるようにするコードはどこに置くべきですか?

10のカテゴリ(IDと説明のみ)があります。私はどのように整理すべきか、裏付豆に属するものを正確に知るための経験と知識が不足していると思う。

public abstract class QuestionHandler { 

    @Inject 
    protected QuestionServiceBean questionBean; 

    @Inject 
    protected Question question; 
    protected List<Answer> answers; 
    protected List<Category> categories; 
    protected String correctAnswer; 

    public void updateQuestion() { 
     questionBean.updateQuestion(question); 
    } 

    public String persist() {    
     question.setAnswers(answers); 
     question.setCategories(categories); 
     questionBean.persistQuestion(question); 
    } 

    public void persistAsUserSubmitted() { 
     question.setAnswers(answers); 
     question.setCategories(categories); 
     questionBean.persistAsUserSubmitted(question); 
    } 

    protected void addAnswerAlternative() { 
     if (answers != null) { 
      answers.add(new Answer()); 
     } 
    } 

    public abstract void init(); 

     // Removed the getters/setters for readability. 

} 

このクラスは必然的に拡張され、initメソッドが実装されていますが、ここでは重要ではありません。

答えて

1

ロジックがドメインに関連する場合は、CategoryServiceBeanがカテゴリを取得するのに適しています。

+0

通常、servicebean prドメインモデルは1つありますか? (私は学んでいるので、それは多分愚かな質問です) – LuckyLuke

+0

それは絶対に素晴らしいです。 – yatskevich

0

これは正しく表示されません。あなたはコントローラのモデルのプロパティを分解しています。

protected Question question; 
protected List<Answer> answers; 
protected List<Category> categories; 

public String persist() {    
    question.setAnswers(answers); 
    question.setCategories(categories); 
    questionBean.persistQuestion(question); 
} 

public void persistAsUserSubmitted() { 
    question.setAnswers(answers); 
    question.setCategories(categories); 
    questionBean.persistAsUserSubmitted(question); 
} 

一つは、それがより

protected Question question; 

public String persist() {    
    questionBean.persistQuestion(question); 
} 

public void persistAsUserSubmitted() { 
    questionBean.persistAsUserSubmitted(question); 
} 

がwereinあなただけ #{bean.question.answers}#{bean.question.categories}の代わりに、 #{bean.answers}#{bean.categories}によってビュー内のネストされたプロパティを参照することを期待します。

具体的な質問については、<f:selectItems>などで使用される「利用可能なカテゴリ」について話しているとします。はい、別の(アプリケーションスコープの)beanに入れるだけです。しかし、それが「選択されたカテゴリ」に関係している場合は、にバインドしてください。#{bean.question.categories}としてください。例えば。

<h:selectManyListbox value="#{bean.question.categories}" converter="#{categoryConverter}"> 
    <f:selectItems value="#{data.categories}" /> 
</h:selectManyListbox> 

あなたは(あなたの他のquesitonに基づいて)その中に@EJBを使用したいと私はそれが@ManagedBeanまたは@Namedであることを前提としているため、コンバータは、ELによって参照されていることに注意してください。

+0

しかし、これはユーザーが新しい質問をしたときです。それ以前の質問には、答えやカテゴリーがありません。私はそれをやる別の方法を考えることができませんでした。 – LuckyLuke

+0

私はそれが問題を形成する可能性がある方法を見ていません。 'New Question()'を実行して、ネストされたリストのプロパティが 'null'でないことを確認するだけです。 – BalusC

+0

カテゴリは選択メニューに表示されます。それ以前の新しい質問ではカテゴリには触れられていません。私がそれを理解すればわかりません。私は新しいQuestionオブジェクトを作成し、次に2人のarraylistsを作成し、新しく作成された質問オブジェクトのインスタンスを回答/カテゴリとしてバインドする必要がありますか? – LuckyLuke

関連する問題