jsf ajax按钮从列表中删除元素,但是ajax不会重新渲染数据表

时间:2014-06-30 10:38:31

标签: ajax jsf datatable

我有奇怪的问题。我有一个dataTable,我提供了一个对象列表。这是代码:

<h:dataTable value="#{XXXX.questions}" var="q" binding="#{varQ}" id="YYY">
  <h:column>
    <f:facet name="header">
      header
    </f:facet>
     #{q.question}
  </h:column>
    <h:commandButton value="-" action="#{XXX.removeQuestion(varSurvey.index, varSec.index, varQ.rowIndex)}">
    <f:ajax execute="@this" render="YYY"/>
   </h:commandButton>
  </h:column>
</h:dataTable>

如您所见 - 我有一个按钮可以从列表中删除一个项目。方法工作正常,它删除我想要删除的元素,但不刷新数据表。我不明白为什么。

我的bean是SessionScoped,我在页面的其他部分得到了几乎相同的表,并且它的工作让我感到困惑。

我的bean方法是这样的:

public void removeQuestion(Integer surveyIndex, Integer sectionIndex, int questionIndex){
    surveyList.get(surveyIndex).getSections().get(sectionIndex).getQuestions().remove(questionIndex);
}

所以你可以看到 - 它几乎是一个基本的例子。

以下是同一页面中我的其他表的代码:

<h:dataTable value="#{XXX.answers}" id="ZZZ" var="ans">
  <h:column>
     <h:inputText value="#{ans.choice}" styleClass="form-control">
        <f:ajax event="change" execute="@this"/>
     </h:inputText>
  </h:column>
<f:facet name="footer">
  <h:commandButton value="+" action="#{XXX.addMoreQuestions()}">
    <f:ajax execute="@this" render="ZZZ"/>
  </h:commandButton>
</f:facet>
</h:dataTable>

和方法:

public void addMoreQuestions(){
    answers.add(new Choice("question"));
}

这样可行 - 当我点击按钮时,它会再添加一个问题列表,并使用另一个选项重新呈现数据表。

感谢您的帮助

0 个答案:

没有答案