更新:对于那些将此标记为重复关闭的标记,所假定的重复问题与我所要求的无关。我的问题是我不知道,直到渲染时间什么问题集,会有多少问题或什么问题类型将是,所以我不能使用“可能的重复”答案中描述的技术。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 “可能的欺骗”问题。此外,我在我的文本中链接到相同的绑定文章!事实上,这是什么促使我的问题。 –