2011-07-16 128 views
1

我正在用IceFaces創建一個使用JSF的在線調查應用程序。調查可以有任何問題。每個問題可以是多種選項的複選框,單選按鈕,文本框等中的任何一種。jsf渲染組件類型?

現在我需要在jsf中每頁顯示一個問題。我正在從數據庫中提取問題類型,問題,選項列表(opt1,opt2,opt3 ...)。

當用戶點擊上一個按鈕時,我需要回到上一個問題。 當用戶點擊下一個按鈕時,我需要轉到下一個問題。 最後,當用戶點擊提交按鈕時,需要將調查數據存儲在數據庫中。

如何根據問題類型渲染組件? (如果問題類型是複選框意味着,我需要顯示覆選框。如果問題類型是單選按鈕意味着,我需要顯示單選按鈕..)

我該怎麼做?任何人都可以幫助我嗎?

如果有這種類型的任何示例,請與我分享鏈接。

+0

試試這個[鏈接](http://stackoverflow.com/questions/2319098/jsf-icefaces-conditional-rendering),它可能會有所幫助。 –

回答

3

使用rendered屬性。如果屬性中的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]}」頁面返回:「目標不可到達,'null'返回null! – Filippo1980

+0

@Flippo:只是'answers = new ArrayList ()'在字段或in(後)構造函數中。 – BalusC