按Liferay教程创建选择弹窗时,JournalItemSelectorCriterion提示无选择视图
我之前在Liferay 7.x开发中也碰到过一模一样的问题,弹窗能打开但显示“Selection is not available”,背后的核心原因是ItemSelector找不到匹配JournalItemSelectorCriterion的视图组件,或者缺少必要的配置/数据。给你几个排查和解决的方向:
1. 确认依赖包是否完整引入
JournalItemSelectorCriterion属于Journal模块的ItemSelector扩展,你需要确保项目的依赖中包含了以下几个关键包(以Gradle为例,Maven同理):
dependencies { compileOnly group: "com.liferay", name: "com.liferay.item.selector.api", version: "3.0.0" compileOnly group: "com.liferay", name: "com.liferay.journal.api", version: "6.0.0" compileOnly group: "com.liferay", name: "com.liferay.journal.item.selector.api", version: "2.0.0" }
如果缺少com.liferay.journal.item.selector.api,ItemSelector无法识别JournalItemSelectorCriterion对应的视图,就会抛出“No item selector views found”的提示。
2. 给JournalItemSelectorCriterion设置正确的GroupId
Journal文章是绑定到具体站点(Group)的,如果你的JournalItemSelectorCriterion没有指定groupId,ItemSelector不知道该去哪个站点查找文章,自然返回空结果。在创建Criterion的时候一定要传入当前站点的GroupId:
// 获取当前主题显示对象里的站点GroupId long groupId = themeDisplay.getScopeGroupId(); JournalItemSelectorCriterion journalItemSelectorCriterion = new JournalItemSelectorCriterion(); journalItemSelectorCriterion.setGroupId(groupId);
3. 检查目标站点是否存在Journal文章
这个容易被忽略:如果你的目标站点下还没有创建任何Journal文章,弹窗当然会显示空状态。先去站点内容 > Web内容里创建几篇测试文章,再重新打开弹窗试试。
4. 验证当前用户的权限
当前操作的用户需要有查看Web内容的权限(即com.liferay.journal.model.JournalArticle的VIEW权限)。如果用户没有权限访问任何Journal文章,ItemSelector会过滤掉所有内容,显示“Selection is not available”。
5. 确认ItemSelector的注入和调用是否正确
确保你通过OSGi的@Reference正确注入了ItemSelector实例:
@Reference private ItemSelector _itemSelector;
调用_itemSelector.getItemSelectorURL()时,参数要正确传递JournalItemSelectorCriterion和当前的PortletRequest/Response。
内容的提问来源于stack exchange,提问作者Victor

