我需要知道用户何时修改其个人资料中的某些属性。
我做了一个钩子,但是像生日这样的一些字段在 onAfterUpdate 和 onBeforeUpdate 函数中是相同的值。
我不知道如何才能知道用户字段和自定义字段何时更改。我想扩展配置文件,但我不知道如何以及这是否是唯一或最好的解决方案。
这是portal.properties的代码:
value.object.listener.com.liferay.portal.model.User=com.rulessegmentation.hook.profile.CreateAccountHook
这是钩子的代码:
public void onAfterUpdate(User user) throws ModelListenerException {
System.out.println("Hello UPDATE After");
try {
System.out.println(UserLocalServiceUtil.getUser(user.getUserId()).getBirthday());
System.out.println(user.getBirthday());
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void onBeforeUpdate(User user) throws ModelListenerException {
System.out.println("Hello UPDATE Before");
try {
System.out.println(UserLocalServiceUtil.getUser(user.getUserId()).getBirthday());
System.out.println(user.getBirthday());
} catch (PortalException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SystemException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这是输出:
您好 1990 年 2 月 12 日星期一 00:00:00 GMT 之前的更新 1990 年 2 月 12 日星期一 00:00:00 GMT
您好 1990 年 2 月 12 日星期一 00:00:00 GMT 之后的更新 1990 年 2 月 12 日星期一 00:00:00 GMT
谢谢!
我重写 UserLocalService 以了解发生变化的属性以及 AddressLocalService 的相同属性。它有效,但我不知道我是否做得很好,因为其他钩子现在不起作用。我做了一个钩子,在 liferay-hook.xml 我放了这个:
<hook>
<service>
<service-type>com.liferay.portal.service.UserLocalService</service-type>
<service-impl>com.segmentationProjecthookUpdate.hook.MyUserLocalServiceImpl</service-impl>
</service>
<service>
<service-type>com.liferay.portal.service.AddressLocalService</service-type>
<service-impl>com.segmentationProjecthookUpdate.hook.MyAddressLocalServiceImpl</service-impl>
</service>
</hook>
在 MyUserLocalServiceImpl.java 中: public class MyUserLocalServiceImpl extends UserLocalServiceWrapper {
public MyUserLocalServiceImpl(UserLocalService userLocalService) {
super(userLocalService);
// TODO Auto-generated constructor stub
}
public User updateUser(long userId, String oldPassword, String newPassword1, String newPassword2, boolean passwordReset, String reminderQueryQuestion, String reminderQueryAnswer, String screenName, String emailAddress, long facebookId, String openId, String languageId, String timeZoneId, String greeting, String comments, String firstName, String middleName, String lastName, int prefixId, int suffixId, boolean male, int birthdayMonth, int birthdayDay, int birthdayYear, String smsSn, String aimSn, String facebookSn, String icqSn, String jabberSn, String msnSn, String mySpaceSn, String skypeSn, String twitterSn, String ymSn, String jobTitle, long[] groupIds, long[] organizationIds, long[] roleIds, List<UserGroupRole> userGroupRoles, long[] userGroupIds, ServiceContext serviceContext) {
System.out.println("UPDATE USER");
return getWrappedService().updateUser(userId, oldPassword, newPassword1, newPassword2,passwordReset, reminderQueryQuestion, reminderQueryAnswer,screenName, emailAddress, facebookId, openId, languageId,timeZoneId, greeting, comments, firstName, middleName, lastName,prefixId, suffixId, male, birthdayMonth, birthdayDay, birthdayYear, smsSn, aimSn, facebookSn, icqSn, jabberSn, msnSn, mySpaceSn,skypeSn, twitterSn, ymSn, jobTitle, groupIds, organizationIds,roleIds, userGroupRoles, userGroupIds, serviceContext);
}
}
它可以工作,但我用于登录的另一个钩子不起作用。
谢谢。
我加入了 2 个钩子,它起作用了。