在 Liferay 门户中自定义 CreateAccountAction
Customize CreateAccountAction in Liferay Portal
我正在尝试在创建用户时添加 "User Group" 选择字段(自助用户注册表 - create_account.jsp)。
这里的自定义字段没有帮助,因为用户组已经存在于数据库中。我想插入现有 Users_UserGroups table。
我正在使用下面的钩子:
但是没有在组中添加用户,也没有打印异常。
请建议我实现此目标的任何其他方法。
public class CustomCreateAccountAction extends BaseStrutsPortletAction
{
public void processAction(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception
{
System.out.println("My Custom Process Action Method is Called");
String emailid=ParamUtil.getString(actionRequest, "emailAddress");
long[] userGroupIds = null;
originalStrutsPortletAction.processAction(originalStrutsPortletAction, portletConfig, actionRequest,actionResponse);
System.out.println("This is after user is registered");
if (SessionErrors.isEmpty(actionRequest))
{
ThemeDisplay themeDisplay =(ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
long newlyCreatedUserId=UserLocalServiceUtil.getUserIdByEmailAddress(themeDisplay.getCompanyId(), emailid);
long userIds[]={newlyCreatedUserId};
long dummygroupid=16206;
System.out.println("TEST UserID="+newlyCreatedUserId);
System.out.println("TEST GroupID="+dummygroupid);
//Everything went well until here.
UserServiceUtil.addUserGroupUsers(dummygroupid, userIds);
//below sysout is not printed. and no exception or user in group db created.
System.out.println("user added to group");
}
}
public String render(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, RenderRequest renderRequest, RenderResponse renderResponse) throws Exception
{
System.out.println("My Custom Render Method is Called");
return originalStrutsPortletAction.render(null, portletConfig, renderRequest, renderResponse);
}
}
有关详细信息,请查看 this 主题。
我不确定这是最好的主意,但您可以使用挂钩来修改用户创建 jsp 并通过模型侦听器在用户 create/modify 上保存值。
注册
使用 UserLocalServiceUtil 代替 UserServiceUtil 有效。基本上,区别在于 *ServiceUtil 检查权限而 *LocalServiceUtil 不检查权限。
我正在尝试在创建用户时添加 "User Group" 选择字段(自助用户注册表 - create_account.jsp)。 这里的自定义字段没有帮助,因为用户组已经存在于数据库中。我想插入现有 Users_UserGroups table。 我正在使用下面的钩子: 但是没有在组中添加用户,也没有打印异常。
请建议我实现此目标的任何其他方法。
public class CustomCreateAccountAction extends BaseStrutsPortletAction
{
public void processAction(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse)
throws Exception
{
System.out.println("My Custom Process Action Method is Called");
String emailid=ParamUtil.getString(actionRequest, "emailAddress");
long[] userGroupIds = null;
originalStrutsPortletAction.processAction(originalStrutsPortletAction, portletConfig, actionRequest,actionResponse);
System.out.println("This is after user is registered");
if (SessionErrors.isEmpty(actionRequest))
{
ThemeDisplay themeDisplay =(ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
long newlyCreatedUserId=UserLocalServiceUtil.getUserIdByEmailAddress(themeDisplay.getCompanyId(), emailid);
long userIds[]={newlyCreatedUserId};
long dummygroupid=16206;
System.out.println("TEST UserID="+newlyCreatedUserId);
System.out.println("TEST GroupID="+dummygroupid);
//Everything went well until here.
UserServiceUtil.addUserGroupUsers(dummygroupid, userIds);
//below sysout is not printed. and no exception or user in group db created.
System.out.println("user added to group");
}
}
public String render(StrutsPortletAction originalStrutsPortletAction, PortletConfig portletConfig, RenderRequest renderRequest, RenderResponse renderResponse) throws Exception
{
System.out.println("My Custom Render Method is Called");
return originalStrutsPortletAction.render(null, portletConfig, renderRequest, renderResponse);
}
}
有关详细信息,请查看 this 主题。
我不确定这是最好的主意,但您可以使用挂钩来修改用户创建 jsp 并通过模型侦听器在用户 create/modify 上保存值。
注册
使用 UserLocalServiceUtil 代替 UserServiceUtil 有效。基本上,区别在于 *ServiceUtil 检查权限而 *LocalServiceUtil 不检查权限。