<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"));
}
这样可行 - 当我点击按钮时,它会再添加一个问题列表,并使用另一个选项重新呈现数据表。
感谢您的帮助