更新:對於那些將此標記爲重複關閉的標記,所假定的重複問題與我所要求的無關。我的問題是我不知道,直到渲染時間什麼問題集,會有多少問題或什麼問題類型將是,所以我不能使用「可能的重複」答案中描述的技術。JSF 2.0動態表單最佳實踐
我們的JSF 2.x應用程序的一部分需要將問題集呈現給用戶,問題和問題類型直到運行時才知道。例如,我們有這樣的事情(爲清楚起見省略getter/setter方法):
public class QuestionSet {
private List<Section> sections;
}
public class Section {
private String sectionTitle;
private List<Question> questions;
private SectionStatus status; // e.g. UNANSWERED, CURRENTLY_ANSWERING,ANSWERED, COMPLETED
}
public class Question {
private String questionText;
private QuestionType questionType; // E.G TEXT, RADIO, LIST, CHECKBOX
private List<String> options; // for RADIO/LIST/CHECKBOX types
private List<String> answers;
}
我們需要呈現在一個單獨的DIV每個部分,這取決於它的狀態(例如未回答將顯示一個div只是標題,就問會顯示帶有部分標題和綠色刻度標記的div,CURRENTLY_ANSWERING將使用部分標題呈現div,然後使用基於問題類型的適當輸入控件顯示每個問題。
問題在運行期間也是動態的 - 例如,如果用戶對單選按鈕問題回答「是」,則可能會提示更多的子問題。
我目前做這個用結合,即
<h:panelGroup binding = "#{bean.panelGroup}" />
和bean的getPanelGroup內的ValueExpressions等,它們工作正常,但在閱讀一些BalusC的的手工創建全光照的事情組件樹像HtmlPanelGroup,HtmlOutputText,UIInput回答,特別是對這個問題:How does the 'binding' attribute work in JSF? When and how should it be used?我想知道是否有一個「更好」的方法?
我關心的一件事是,在RECREATE_VIEW期間因爲鏈接問題中解釋的原因(在調用綁定中引用的方法之後)調用getter,所以除非我採取步驟在RECREATE_VIEW階段中僅返回我在上一個RENDER_RESPONSE階段創建的組件,這會導致重新創建我剛創建的東西的不必要花費。
在這種情況下,JSF調用我的setter來設置我剛纔在綁定屬性的getter中設置的東西似乎毫無意義。 (我的bean是視圖範圍內,我將需要使用AJAX對於一些我們的用戶需要的功能)
思想/意見(尤其是從以往任何時候都很有幫助BalusC)不勝感激...
[JSF:動態更改窗體]的可能重複(http://stackoverflow.com/questions/5654269/jsf-dynamically-change-form) – 757071
有關如何綁定工作檢查的詳細信息:http://stackoverflow.com/questions/14911158/how-binding-attribute-in-jsf-works – 757071
@johny,我不希望聽起來那麼尖銳,但你還沒有正確地閱讀我的問題。這是最肯定不是你的評論中的第一個鏈接的重複 - 正如我所說,我不知道,直到我查詢數據庫有多少問題會有什麼問題類型將是,所以我不能在你的wy中使用ajax 「可能的欺騙」問題。此外,我在我的文本中鏈接到相同的綁定文章!事實上,這是什麼促使我的問題。 –