如何在 Liferay Portlet 中通过结构名称获取 Web 内容?

How to get Web Content by Structure name in Liferay Portlet?

我需要在 jsp portlet 中获取使用特定结构创建的所有 Web 内容。

我尝试使用 structureName 但这会引发异常

ClassLoader cl = PortalClassLoaderUtil.getClassLoader();
DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(JournalArticle.class, cl)
        .add(PropertyFactoryUtil.forName("structureName").eq("Empresa"));
List <JournalArticle> journalArticles = JournalArticleLocalServiceUtil.dynamicQuery(dynamicQuery);

如何按结构获取网页内容?

查询journalarticles时需要使用structureId字段,像这样传递structureKey作为值

DynamicQuery dynamicQueryStructure = DynamicQueryFactoryUtil.forClass(
                DDMStructure.class).add(PropertyFactoryUtil.forName("name").like(
                "%>Empresa</Name>%"));

        List<DDMStructure> structures = DDMStructureLocalServiceUtil.dynamicQuery(dynamicQueryStructure, 0, 1);
        if(!structures.isEmpty()) {
            String structureKey = structures.get(0).getStructureKey();
            ClassLoader cl = PortalClassLoaderUtil.getClassLoader();
            DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(JournalArticle.class, cl)
                    .add(PropertyFactoryUtil.forName("structureId").eq(structureKey));
            List<JournalArticle> journalArticles = JournalArticleLocalServiceUtil.dynamicQuery(dynamicQuery);

        }

不需要构造动态查询,fiddle使用class加载器,JournalArticleService可以做到。

参见JournalArticleLocalServiceUtil#getStructureArticles(groupId, dmStructureKey)