使用DataModel<MyObject>
,我根据this response
现在在每一行的末尾,我有一个删除按钮,它调用我的bean的某个方法。数据被彻底删除。但由于删除后数据已更改,我想重新加载页面以反映更改。
我的尝试是在faces-config.xml
中添加导航规则:
概观 /overview.jsp deletedsubscription /overview.jsp
如果我有<redirect />
,无论哪种方式,都不会重新加载或做任何其他事情。数据被删除,因此实际调用了bean的方法。
我的按钮如下所示:
<h:dataTable border="1" value="#{overviewBean.overviewModel }" var="item" first="0">
<h:column id="column13">
<f:facet name="header">
<h:outputText value="#{messages.overviewDeleteItem }"></h:outputText>
</f:facet>
<h:commandButton action="#{overviewBean.deleteItem}" value="X"/>
</h:column>
</h:dataTable>
设置属性type="submit"
实际上解决了问题。页面重新加载。
我现在的问题是:提交真的需要吗?不是JSF(Apache MyFaces)有一些使用AJAX消除刚刚删除的行的机制吗?
感谢您尝试帮助JSF新手。
答案 0 :(得分:4)
只需从数据模型的支持列表中删除该项即可。这些变化将反映在模型中。
基本上:
private List<MyObject> overviewList;
private DataModel overviewModel;
public OverviewBean() {
overviewList = overviewDAO.list();
overviewModel = new ListDataModel(overviewList);
}
public void deleteItem() {
MyObject myObject = (MyObject) overviewModel.getRowData();
overviewDAO.delete(myObject);
overviewList.remove(myObject); // See?
}
此后不需要重定向。如果action方法返回void(或null
),它仍将转到同一页面。
JSF 2.0中引入了Ajaxical功能,但如果我没有错,那么你仍然使用JSF 1.x.您最好的选择是采用第三方组件库,如Ajax4jsf(目前是RichFaces的一部分),以满足您认为必要的情况。