期刊文章的 Liferay 模型监听器不显示标题

问题描述 投票:0回答:1

我是 Liferay 的新手,正在从事网络内容文章(期刊文章)的模型作家工作。创建后保留标题和内容很重要。我为此编写了一个简单的脚本。然而,输出的标题为空,内容为零。
文章对象本身不包含标题或内容的键。不幸的是,我不知道该怎么办,希望有人已经有这方面的经验。

package webcontenthandler;

import com.liferay.journal.model.JournalArticle;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.BaseModelListener;
import com.liferay.portal.kernel.model.ModelListener;
import org.osgi.service.component.annotations.Component;

import java.util.List;

@Component(
        immediate = true,
        service = ModelListener.class
)
public class WebContentHandler extends BaseModelListener<JournalArticle> {

    @Override
    public void onAfterCreate(JournalArticle article) {
        try {
            JournalArticle myarticle = JournalArticleLocalServiceUtil.getArticle(article.getGroupId(), article.getArticleId(), article.getVersion());
            System.out.println("article: " + myarticle);
            System.out.println("article content: " + myarticle.getContent());
            System.out.println("article title: " + myarticle.getTitle());
            System.out.println("article title: " + myarticle.getTitleCurrentValue());
        } catch (PortalException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Class<JournalArticle> getModelClass() {
        return JournalArticle.class;
    }
}

java liferay liferay-7
1个回答
0
投票

我已经很长时间没有编写 ModelListeners 了,但是我发现有几个问题需要调查。有些候选人寻找这个问题的根本原因,有些只是风格:

#1,您正在实现一个 OSGi 组件,这意味着您不应该使用

JournalArticleLocalServiceUtil
,而应该实现一个成员
@Reference JournalArticleLocalService jals;

#2:该方法的签名是

public void onAfterCreate(JournalArticle article)
,您要做的第一件事就是从数据库中检索文章。根据您的描述,我假设事务尚未提交 - 例如数据库中尚未提供该文章。但无论如何,从参数到这个方法,你都手头有它——为什么还要从数据库中检索它呢?

#3:如果您更愿意实现 ServiceWrapper 而不是 ModelListener,那么它通常更接近业务层

第 1 项将通过实施第 2 项和/或第 3 项而被推翻(例如不必要),但在其他情况下值得记住该技术。

© www.soinside.com 2019 - 2024. All rights reserved.