我正在尝试使用AssetCategory的addCategory方法创建AssetCategoryLocalServiceUtil。但是,我不知道我应该指定什么作为ServiceContext。与LocalServiceUtil类(Group,Organizations)的其他add-methods不同,我推断我不能将ServiceContext设置为null。我已经尝试过,在调用方法时会收到NullPointerExeption。如果我尝试创建一个,只是为了在方法中传递它,我收到一个AssetCategoryNameException。我创建它:
ServiceContext serviceContext = new ServiceContext();
serviceContext.setScopeGroupId(180);
如何解决上述问题(无异常创建AssetCategory)?
更新:我还需要指定一个词汇表ID。如何获得词汇表(或词汇表列表)才能获得其ID?我尝试了代码:
List<AssetVocabulary> vl = AssetVocabularyUtil.findAll();.
int VocabId = vl.get(0).getVocabularyId();
但它引发了异常:
org.hibernate.HibernateException:没有Hibernate会话绑定到线程,配置不允许在这里创建非事务性的
我该怎么做才能获得VocabularyId?
答案 0 :(得分:1)
检查此代码,希望它能为您提供帮助:
// you can particularise your serviceContext as @Jonas Fonseca says
ServiceContext serviceContext = new ServiceContext();
Map<Locale,String> titleMap = new HashMap<Locale, String>();
titleMap.put(Locale.getDefault(), "categoryName");
// vocabularyID needs to point to an existing vocabulary
AssetCategoryLocalServiceUtil.addCategory(userId, parentCategoryId, titleMap, new HashMap<Locale,String>(), vocabularyID, new String[]{}, serviceContext);
当然是关于如何创建AssetCategory
的最简单示例,但它运行正常。
<强>更新强>
如果你需要词汇,你可以这样:
// in case you have vocabulary id
AssetVocabularyLocalServiceUtil.getVocabulary(vocabularyId);
// in case you have the vocabulary name
AssetVocabularyLocalServiceUtil.getGroupVocabulary(groupId, vocabularyName);
// you can get all vocabularies in group
AssetVocabularyLocalServiceUtil.getGroupVocabularies(groupId);
// ...or all vocabularies in portal
int count = AssetVocabularyLocalServiceUtil.getAssetVocabulariesCount();
AssetVocabularyLocalServiceUtil.getAssetVocabularies(0, count);
(请记住调用* LocalServiceUtil方法而不是* Util,这样可以避免Hibernate异常)
答案 1 :(得分:0)
如果您收到AssetCategoryNameException
,则表示该名称为invalid,例如为null。
您需要在ServiceContext
中设置哪些信息取决于您拨打的服务。至少应该设置userId(将设置为所有者),站点的groupId和companyId。此外,还应设置权限属性,该属性控制谁可以查看资产类别,特别是如果该类别将与资产发布者一起使用,可以根据查看权限过滤内容。
ServiceContext createServiceContext(ThemeDisplay themeDisplay) {
ServiceContext serviceContext = new ServiceContext();
serviceContext.setCompanyId(themeDisplay.getCompanyId());
serviceContext.setScopeGroupId(themeDisplay.getScopeGroupId());
serviceContext.setUserId(themeDisplay.getUserId());
serviceContext.setAddCommunityPermissions(true);
serviceContext.setAddGuestPermissions(true);
return serviceContext;
}