JSF:数据更改后重新加载页面

时间:2011-01-17 23:14:08

标签: jsf datatable backing-beans

使用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新手。

1 个答案:

答案 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的一部分),以满足您认为必要的情况。