我正在使用JSF和IceFaces组件库创建一个在线调查应用程序。调查可以有任何问题。每个问题可以是具有多个选项的任何一种类型复选框,单选按钮等。
为此,我使用数据表动态地向调查添加问题。在该数据表中,我使用另一个数据表来为调查添加选项。
现在问题是,如果我继续单击“添加问题”按钮,则在外部数据表中添加问题时没有任何问题。一旦我点击内部数据表为任何添加的问题添加选项,我就可以添加。但在那之后,如果我再次点击添加问题按钮,它就无法正常工作。
这是我的xhtml代码:
<ice:dataTable id="icePnlQuestionAdd" var="questAdd" value="#{createSurveyManagedBean.surveyQuestionList}">
<ice:column>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<th><ice:outputText value="Question English" style="white-space: nowrap;" /></th>
<td colspan="15">
<ice:inputText id="QuestionEn" style="width:485px;" value="#{questAdd.questionEn}" />
</td>
</tr>
<tr>
<ice:dataTable id="icePnlOptionAdd" var="optionAdd" value="#{questAdd.surveyQuestionOptionList}"> <ice:column>
<th><ice:outputText value="Option " /></th>
<td><ice:inputText id="OptionEn" value="#{optionAdd.optionEn}" /></td>
</ice:column>
</ice:dataTable>
</tr>
</table>
</ice:column>
</ice:dataTable>
这是添加问题方法:
public String addQuestion() {
SurveyDTO addSurveyQuestionDTO = new SurveyDTO();
questionNum = surveyQuestionList.size();
addSurveyQuestionDTO.setQuestionNum(questionNum);
surveyQuestionList.add(addSurveyQuestionDTO);
return "createSurvey";
}
这是添加选项方法:
public String addOption() {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getExternalContext().getRequestParameterMap().get("questionNum") != null) {
String questionNum = (String) context.getExternalContext().getRequestParameterMap().get("questionNum");
int selectedQuestionNum = Integer.valueOf(questionNum);
SurveyQuestionOptionDTO surveyQuestionOptionDTO = new SurveyQuestionOptionDTO();
surveyQuestionList.get(selectedQuestionNum).getSurveyQuestionOptionList().add(surveyQuestionOptionDTO);
}
return "createSurvey";
}