请求scoped bean JSF

时间:2011-09-07 05:03:28

标签: jsf request

我有一个页table.jspx,它显示了所有表的dataTable,并且有一个指向createTable.jspx的链接;当我创建一个新表时,它返回到tables.jspx但它没有显示包含新表的列表。 (tablesBean和createTableBean是请求范围)。我按照BalusC教程http://balusc.blogspot.com/2006/06/using-datatables.html懒惰地初始化getter中的表列表。至于我现在,如果我的bean是请求作用域,请求完成后不应该销毁它。导航来自tables.jspx - > createTable.jspx - > tables.jspx。我希望在创建新表后返回到显示带有新表的新列表的表列表。请帮我理解我做错了什么。

这是我的代码,它返回我在getter中的表列表(简化):

  public List getTables(){
    if(tables==null){ //lazy initialization for a request bean as recommended by BalusC
     //Return list of tables
    }

但如果我更改此行     if(tables==null) if(tables==null ||FacesContext.getCurrentInstance().getRenderResponse())

当我从createTable.jspx返回时,我的列表已经实现,当bean在会话范围内时,建议进行更改,但这会导致我的dataPaginator和sortColumn函数出现问题(因为它在返回DB时的新数据时)我按列排序列表,它返回错误的行进行编辑,因为我在每行中都有一个链接用于编辑和删除)

1 个答案:

答案 0 :(得分:1)

因为您没有发布代码,我将使用您上面链接的教程来解释可能发生的事情......

private void loadDataList() {

        // Do your "SELECT * FROM mydata" thing.
        try {
            dataList = dataDAO.list();
        } catch (DAOException e) {
            setErrorMessage(e.getMessage() + " Cause: " + e.getCause());
            e.printStackTrace();
        }
    }

这是正确的,请求scoped bean tables将在这里创建并销毁TWICE,但每次构造时它都会调用上面列出的方法。这将根据数据库中的当前数据重新初始化表。

如果createTable.jspx应该修改数据库中的数据,那么可能没有发生这些更新,或者请求bean正在过滤掉新数据。