java - Primefaces 数据表无法与 ViewScoped 或 RequestScoped bean 正常工作

标签 java jsf primefaces

我编写了一个 JSF 2 页面,用于可视化数据库中的数据。
当我使用 Primefaces 数据表与 ViewScoped 或 RequestScoped bean 从数据库获取值时,它无法正常工作 - 无法排序且无法分页。例如:

@ManagedBean
@ViewScoped
public class MyBean implements Serializable {

    private List<Animal> animals;

    public List<Animal> getAnimals() {
        if(animals == null) {
            animals = DataBaseConnector.getLastAnimals();
        }
        return animals;
    }
}

当我使用 SessionScoped 更改 ViewScoped 时,效果很好,但我想将它与 RequestScope 和 ViewScope 一起使用。 当我使用相同的 bean 并添加静态值时,如下所示:

@ManagedBean
@ViewScoped 
public class MyBean implements Serializable {

    private List<Animal> animals = new ArrayList<Animal>() {{
        add(new Animal("John", 7, new Timestamp(2436343516841235621L)));
        add(new Animal("Holly ", 15, new Timestamp(52343332153212142L)));
        add(new Animal("Betty", 3, new Timestamp(2346236232151232L)));
    }};

    public List<Animal> getAnimals() {
        return animals;
    }
}

它工作正常 - 它可以排序和分页。 我可以使用 primefaces 数据表和 RequestScoped bean 从数据库获取值吗?

最佳答案

如果您将 View 作用域 bean 的属性绑定(bind)到标记处理程序的属性,就会发生这种情况,这将导致在每个 HTTP 请求上重新创建 View 作用域 bean。标签处理程序是 JSTL 标签,例如 <c:if> , <c:forEach>等以及没有 rendered 的 Facelets UI 标签属性如 <ui:include> , <ui:composition>等以及 JSF 核心组件,如 <f:attribute> , <f:validator>等等。您需要确保不将 View 作用域 bean 的属性绑定(bind)到这些标记处理程序。您需要寻找 JSF UI 组件方法,或者将这些属性拆分到不同的请求作用域 bean 中。

另请参阅:

<小时/>

与具体问题无关,虽然 getter 中的延迟加载绝对不会形成问题,但最好在支持 bean 的(后)构造期间这样做。虽然类名DataBaseConnector并且静态方法调用并没有给我一种强烈的感觉,让我觉得你正在以正确的方式做数据库的事情。

关于java - Primefaces 数据表无法与 ViewScoped 或 RequestScoped bean 正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9942614/

相关文章:

java - p :dataList cannot iterate java. util.Set

jsf-2 - PrimeFaces CommandButton Action 未在 Composite 内调用

java - 为什么我不能从事件监听器调用方法,但可以在类的其他地方调用方法?

java - 如何在Java/JSP中使用jQuery网格插件?

jsf - 如何重置 p :dialog together with the disable-state of the contained components?

jsf - 从 PhaseListener 添加消息

jsf - Primefaces 数据表,过滤本地化枚举值

java - 如何在 Java 中插入、替换和删除文件区域?

java - 如何以字符串形式打印数组列表的值?

java - 网页开发 : Cannot load an image