2012-10-14 42 views
1

我在我的portlet中使用Service Builder。這裏是PRProductLocalServiceBaseImpl我addProduct命令方法:Liferay portlet中的密鑰{companyId = 1,name = Owner}錯誤不存在角色

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,名稱=所有者}存在」 。這裏是我的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

已經檢查公司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對象包含很多有用的信息!

也是次要的事情,它的拼寫「請求」而不是「請求」:)

0

也許你需要將內容添加作爲管理員用戶或擁有者的用戶,下面是屁股內容admin用戶添加內容之前設置管理用戶權限的例子,嘗試同爲業主:

User adminUser = UserLocalServiceUtil.getUserByEmailAddress(companyId,"[email protected]"); 
permissionChecker = PermissionCheckerFactoryUtil.create(adminUser); 
PermissionThreadLocal.setPermissionChecker(permissionChecker); 

或只是獲取所有者下面使用代碼:

Role role=com.liferay.portal.service.RoleLocalServiceUtil.getRole(long companyId,"Owner"); 

和更新add方法添加在add方法多了一個參數,即serviceContext和所有角色(所有者)在裏面,因爲我們做得到控制而在liferay中添加用戶。