jsf datatable внутри проблематичного рендеринга - PullRequest
0 голосов
/ 05 июля 2011

Я создаю приложение для онлайн-опросов с использованием 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";
}
...