当前位置: 首页 > 知识库问答 >
问题:

p:dataTable / p:dataGrid和f:setPropertyActionListener中的延迟加载

何骞尧
2023-03-14

我有一个<代码>

<p:dataTable var="row" value="#{testManagedBean.list}">
    <p:column>
        <h:outputText value="#{row.subCatId}"/>
    </p:column>

    <p:column>
        <p:commandLink process="@this">
            <h:outputText value="#{row.subCatName}"/>
            <f:setPropertyActionListener target="#{testManagedBean.subCatName}" value="#{row.subCatName}"/>
        </p:commandLink>
    </p:column>
</p:dataTable>

相应的 RequestScoped 受管 Bean 如下所示。

@ManagedBean
@RequestScoped
public final class TestManagedBean
{
    @EJB
    private final TestBeanLocal testService=null;
    private List<SubCategory>list;
    private String subCatName;

    @PostConstruct
    private void init()
    {
        list=testService.getSubCategoryList();
    }

    public List<SubCategory> getList() {
        return list;
    }

    public String getSubCatName() {
        return subCatName;
    }

    public void setSubCatName(String subCatName) {
        System.out.println("setSubCatName() called : "+subCatName);
        this.subCatName = subCatName;
    }
}

当<代码>

我避免了许多事情,如分页,以有一个最小的例子。

现在,我需要填充这个<代码>

<p:dataTable var="row" value="#{testManagedBean}" lazy="true" rows="10" rowIndexVar="rowIndex">
    <p:column>
        <h:outputText value="#{row.subCatId}"/>
    </p:column>

    <p:column>
        <p:commandLink process="@this">
            <h:outputText value="#{row.subCatName}"/>
            <f:setPropertyActionListener target="#{testManagedBean.subCatName}" value="#{row.subCatName}"/>
        </p:commandLink>
    </p:column>
</p:dataTable>

管理的关联JSF如下所示。

@ManagedBean
@RequestScoped
public final class TestManagedBean extends LazyDataModel<SubCategory> implements Serializable
{
    @EJB
    private final TestBeanLocal testService=null;
    private String subCatName;
    private static final long serialVersionUID = 1L;

    public String getSubCatName() {
        return subCatName;
    }

    public void setSubCatName(String subCatName) {
        System.out.println("setSubCatName() called : "+subCatName);
        this.subCatName = subCatName;
    }

    @Override
    public List<SubCategory> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters)
    {
        setRowCount(4); //Just an example. Otherwise, fetch from the database.
        return testService.getSubCategoryList(first, pageSize, sortField, sortOrder, filters);
    }
}

现在,当<code>时

仅当托管bean使用更广泛的范围(如@ViewScoped)修饰时才调用setSubCatName()(如果惰性设置为true)

为什么不<代码>

在这种情况下,是否必须指定具有比请求范围更宽的托管bean?

共有1个答案

邹坚壁
2023-03-14

是的,这是强制性的,因为基础模型必须是相同的实例。即使它具有相同的值,它也不起作用。

像您一样,我遇到过这种行为:primeface日期延迟加载和每行命令按钮

 类似资料:
  • 描述 (Description) 延迟加载可应用于图像,背景图像和淡入效果,如下所述 - 对于图像 要在图像上使用延迟加载,请按照给定的步骤进行操作 - 使用data-src属性而不是src属性来指定图像源。 将类lazy添加到图像。 <div class = "page-content"> ... <img data-src = "image_path.jpg" class = "l

  • 问题内容: 如果这是完全相同的内容,请纠正我,我知道这个话题经常被讨论,但是找不到确切的答案。 问题: 在MVC Web应用程序中处理Hibernate对象的最佳实用解决方案是什么? 细节: 我正在使用Hibernate,并希望在可能的情况下利用延迟加载。 我正在使用MVC风格的Webapp。 我讨厌获得延迟加载初始化异常。 我讨厌不得不在事务之间重新连接Hibernate对象。 选项: 渴望装载

  • 问题内容: 我正在使用Spring + Hibernate。我所有的HibernateDAO都直接使用sessionFactory。 我有应用程序层->服务层-> DAO层,所有集合都被缓慢加载。 因此,问题在于,有时在应用程序层(包含GUI / swing)中,我会使用服务层方法(包含@Transactional批注)加载实体,并且我想使用此对象的惰性属性,但忽略了会话已经关闭。 解决此问题的最

  • 我有一个类,其中包含一个延迟加载的属性

  • 问题内容: 我在JPA实体中的延迟加载属性有问题。我读过许多类似的问题,但它们与spring或hibernate有关,并且他们的后代不适用或没有帮助。 该应用程序是在Wildfly应用程序服务器上运行的JEE和JPA2.1。有两个实体,DAO会话bean和servlet将它们放在一起: 当我运行此代码时,它失败并显示: 我对WebLogic / JPA1使用了非常相似的模式,并且运行平稳。任何的想

  • 问题内容: 我想知道在node.js中使用是否等效于延迟加载? 例如,如果我有一个函数需要代码中其他任何地方都不需要的特定node.js包,那么我最好在该函数内部使用它,以便仅在调用该函数时才包含所需的包。 我还不确定是否会由于缺乏对node.js架构的了解而在性能方面有所改善?我想它每次与服务器的连接都会使用更少的内存。但是,当它必须读取程序包时,它会增加磁盘的I / O吗,还是将其添加到内存中