我在我的portlet中使用Service Builder。这是PRProductLocalServiceBaseImpl
中的addProduct方法:
public class PRProductLocalServiceImpl extends PRProductLocalServiceBaseImpl {
public PRProduct addProduct(long companyID, long groupID, String productName, String serialNumber, long userID) throws SystemException, PortalException{
PRProduct product = prProductPersistence.create(counterLocalService.increment(PRProduct.class.getName()));
resourceLocalService.addResources(companyID, groupID, userID, PRProduct.class.getName(), product.getPrimaryKey(), false, true, true);
product.setProductName(productName);
product.setSerialNumber(serialNumber);
product.setCompanyId(companyID);
product.setGroupId(groupID);
return prProductPersistence.update(product, false);
}
}
当我从我的portlet类调用此方法并将1作为companyID传递时,它给出了“没有角色{companyId = 1,name = Owner}”的角色。这是我的portlet类:
public void addProduct(ActionRequest actionReaquest, ActionResponse actionResponse)
{
PortletSession session = actionReaquest.getPortletSession();
try
{
String productName = actionReaquest.getParameter("productName");
String userID = actionReaquest.getParameter("userID");
String companyID = actionReaquest.getParameter("companyID");
String groupID = actionReaquest.getParameter("groupID");
String serialNumber = actionReaquest.getParameter("serialNumber");
PRProduct product = PRProductLocalServiceUtil.addProduct(Long.parseLong(companyID), Long.parseLong(groupID), productName,
serialNumber, Long.parseLong(userID));
session.setAttribute("errorMessage", "Product added successfully");
actionResponse.setRenderParameter("jspPage", "/ProductAdded.jsp");
}
catch(Exception e)
{
session.setAttribute("errorMessage", e.getMessage());
actionResponse.setRenderParameter("jspPage", "/ProductAdded.jsp");
}
}
任何身体都能帮忙吗?提前感谢任何帮助。
答案 0 :(得分:0)
可能您需要以管理员用户或所有者用户的身份添加内容,下面是管理用户在添加内容之前设置adminUser权限的内容示例,请对所有者进行相同操作:
User adminUser = UserLocalServiceUtil.getUserByEmailAddress(companyId,"test@liferay.com");
permissionChecker = PermissionCheckerFactoryUtil.create(adminUser);
PermissionThreadLocal.setPermissionChecker(permissionChecker);
或者只是使用以下代码获取所有者:
Role role=com.liferay.portal.service.RoleLocalServiceUtil.getRole(long companyId,"Owner");
并更新add方法在add方法中添加一个参数,即serviceContext
和所有角色(所有者),就像我们在liferay中添加User一样。
答案 1 :(得分:0)
检查公司ID是否实际上是1?
获取当前Liferay用户ID,组ID和公司ID的最佳方法是ThemeDisplay
对象。所以不要使用你的代码:
String userID = actionReaquest.getParameter("userID");
String companyID = actionReaquest.getParameter("companyID");
String groupID = actionReaquest.getParameter("groupID");
您应该使用:
ThemeDisplay themeDisplay = (ThemeDisplay) actionReaquest.getAttribute(WebKeys.THEME_DISPLAY);
long realUserId = themeDisplay.getRealUserId();
long companyId = themeDisplay.getCompanyId();
long groupId = themeDisplay.getScopeGroupId();
这样你就可以从Liferay获得价值,而不必自己传递它们。这也意味着您不必使用Long.parseLong()
来获取字符串的Long值。
看看这是否有帮助!对于任何未来的portlet,这样做也是更好的做法。 ThemeDisplay对象包含许多有用的信息!
同样重要的是,拼写为“请求”而非“重新命名”:)