Liferay 7:使用javascript api jsonws检索到的自定义字段值返回java.lang.NullP



我对liferay很陌生,我使用"控制面板>配置>自定义字段>页面"创建了一个页面自定义字段。我的目标是从页面自定义字段中检索值,并在我的自定义portlet中显示该值。我尝试过的方法之一是使用liferay-jsonweb服务中的ExpandoValue/get-data API,这个API是从localhost:8080/API/jsonws生成的。以下是生成的javascript API:

Liferay.Service(
'/expandovalue/get-data',
{
companyId: themeDisplay.getCompanyId(),
className: 'com.liferay.portal.model.Page',
tableName: 'CUSTOM_FIELDS',
columnNames: 'pageDetail',
classPK: themeDisplay.getUserId()
},
function(obj) {
console.log(obj);
}
);

然而,这个api给我带来了一个错误:java.lang.NullPointerException。我认为这个错误是由于给自定义字段的权限造成的。因此,我已经勾选了Guest的查看和更新权限。但问题依然存在。

我的问题是,是什么触发了这个错误,如何修复它,还有什么其他解决方案可以用来从页面自定义字段中检索值吗?

提前谢谢。

编辑

我在为api分配属性时有误解,这是Olaf建议的新api。

Liferay.Service(
'/expandovalue/get-data',
{
companyId: 20115,
className: 'com.liferay.portal.kernel.model.Layout',
tableName: 'CUSTOM_FIELDS',
columnName: 'details',
classPK: themeDisplay.getLayoutId()
},
function(obj) {
console.log(obj);
}
);

它运行良好。然而,它只采用默认值,而没有为特定页面指定值。

如果内存正常,未经身份验证的用户不能使用股票远程API,但至少需要一个登录用户(当然,除了常规权限之外)。

您可以通过从具有相同权限的登录帐户访问API来对此进行测试。如果它在那里有效,那么这就是你所遇到的。

但是,当我正确解释您问题中的调用时,当前用户id将是您正在查看的自定义字段的主键(查看classPK值)。对于页面上的自定义字段,我希望有一个页面id(Liferay-API-术语中的layoutId)。当我看到这个的时候,我注意到你的片段中有com.liferay.portal.model.Page。我没有见过那个类,页面可以在com.liferay.portal.kernel.model.Layout(假设Liferay 7.1)中找到

这让我想知道你在这里想要实现什么——你是在寻找一个用户特定的字段(然后是用户的自定义字段),还是真的是一个页面特定的字段?无论如何,由于这是一个答案,而不是评论,它可能会提供足够的提示来尝试并接近解决方案。

最新更新