【问题标题】:managed beans as managed properties托管 bean 作为托管属性
【发布时间】:2010-05-24 17:11:55
【问题描述】:

我在 WebSphere 6.1 上使用 JSF 1.1。我正在应用程序中构建搜索功能并且遇到了一些问题。我已经去掉了额外的东西,并给自己留下了以下内容:

4 个托管 bean:

  • SearchController - 控制器 bean,会话范围
  • SearchResults - 会话范围(存储结果)
  • ProductSearch - 会话范围(存储搜索条件)
  • ResultsBacking - DataTable 的支持 bean,用于确定点击了哪一行,请求范围

SearchController bean 具有作为托管属性的其他 3。除 ResultsBacking 之外的所有属性都是会话范围的。

如果搜索结果中只有一项,我想直接调出那条记录。我在 ResultsBacking 方法中为数据表调用 setFirst(0)(我想使用现有的方法来处理单击了哪个项目,因此在 setFirst 之后立即调用它)。

当我进行另一次搜索时,在数据表中调用 getRowData 时收到 IllegalArgumentException。根据 api,这是抛出“如果 now(sic) 行数据在当前指定的行索引处可用”。

我很困惑为什么会发生这种情况。它第一次有效,但第二次无效。我是否需要在新搜索中删除 ResultsBacking 以摆脱旧状态?

【问题讨论】:

  • 我只是做了一些修改,不再使用 setFirst(0)。如果 isRowAvailable 为 false,我会直接从 SearchResults ArrayList(而不是 getRowData())中获取第一个条目。这可行,但对我来说似乎有点脏。
  • 显示你的一些代码,特别是在setFirst()附近
  • 你应该发布一些关于你正在做的事情的SSCCE,否则很难提供帮助。

标签: jsf


【解决方案1】:

在我的支持 bean 的 getFirstRow 方法中,我在 databable 上调用了 setFirst(0)。将其更改为 setRowIndex(0) 可以解决问题。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 2012-06-27
    • 2013-12-23
    • 1970-01-01
    • 2012-06-30
    • 2011-02-20
    • 1970-01-01
    • 2015-03-11
    • 2011-07-10
    相关资源
    最近更新 更多