2011-07-16 6 views
1

私は、IceFacesでJSFを使用してオンライン調査アプリケーションを作成しています。調査にはいくつでも質問があります。それぞれの質問は、複数のオプションを持つチェックボックス、ラジオボタン、テキストボックスなどのいずれかのタイプにすることができます。jsfレンダリングコンポーネントタイプ?

ここでは、1ページあたり1つの質問をjsfに表示する必要があります。質問タイプ、質問、オプションリスト(opt1、opt2、opt3 ...)のデータをdbから取り出しています。

ユーザーがprevボタンをクリックすると、以前の質問に戻る必要があります。 ユーザーが次のボタンをクリックすると、次の質問に移動する必要があります。 最後に、ユーザーが[送信]ボタンをクリックすると、アンケートデータをdbに保存する必要があります。

質問タイプに基づいてコンポーネントをレンダリングするにはどうすればよいですか? (質問タイプがチェックボックスの場合、チェックボックスを表示する必要があります。質問タイプがラジオボタンの場合、ラジオボタンを表示する必要があります)。

どうすればいいですか?誰でもこのことを教えてくれますか?

このタイプの例があれば、私にそのリンクを教えてください。

+0

は、この[リンク](http://stackoverflow.com/questions/2319098を試してみてください/ jsf-icefaces-conditional-rendering)、それが役に立ちます。 –

答えて

3

rendered属性を使用します。 attiributeのEL条件がtrueと評価された場合、コンポーネントはHTMLを出力にレンダリングし、そうでない場合は出力をレンダリングします。

ので、次のようにあなたがそれを使用することができますが、

public class Question { 

    public enum Type { 
     SINGLE, MULTIPLE; 
    } 

    private Long id; 
    private Type type; 
    private String text; 
    private List<Answer> answers; 

    // ... 
} 

をしたと仮定:

<h:dataTable value="#{bean.questions}" var="question"> 
    <h:column> 
     <h:selectOneRadio value="#{bean.answers[question.id]}" rendered="#{question.type == 'SINGLE'}"> 
      <f:selectItems value="#{question.answers}" /> 
     </h:selectOneRadio> 
     <h:selectManyCheckbox value="#{bean.answers[question.id]}" rendered="#{question.type == 'MULTIPLE'}"> 
      <f:selectItems value="#{question.answers}" /> 
     </h:selectManyCheckbox> 
    </h:column> 
</h:dataTable> 
+0

あなたは変数の回答をどのように開始するか教えていただけますか?私はあなたの例のような何かをする必要がありますが、 "#{bean.answers [question.id]}"と書いたときに値を設定しようとすると、ページは次のように戻ります: "Target Unreachable、 'null'が返されました! – Filippo1980

+0

@Flippo:フィールドや(投稿)コンストラクタで 'answers = new ArrayList ()'と表示されます。 – BalusC