【问题标题】:request scoped bean JSF请求范围的 bean JSF
【发布时间】:2011-11-11 20:16:44
【问题描述】:

我有一个页面 tables.jspx,它显示了所有表的数据表,并有一个指向 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 函数带来了问题(因为它在我按列对列表进行排序,它返回错误的行进行编辑,因为我在每一行中都有一个用于编辑和删除的链接)

【问题讨论】:

    标签: jsf request


    【解决方案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();
            }
        }
    

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

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

    【讨论】:

    • 我认为我的请求 bean 没有过滤数据:这是我的代码
    猜你喜欢
    • 2011-08-15
    • 2011-09-02
    • 2014-12-02
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多