【发布时间】: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