Lorsqu’on est dans un ModelListener, nous n’avons pas la request et donc à priori aucun moyen d’obtenir le userId. Pourtant, en regardant la classe com.liferay.portal.service.base.PrincipalBean (dont tous les services liferay héritent) on aperçoit la méthode getUserId() ci-dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public long getUserId() throws PrincipalException { String name = PrincipalThreadLocal.getName(); if (name == null) { throw new PrincipalException(); } if (Validator.isNull(name)) { throw new PrincipalException("Principal cannot be null"); } else { for (int i = 0; i < ANONYMOUS_NAMES.length; i++) { if (name.equalsIgnoreCase(ANONYMOUS_NAMES[i])) { throw new PrincipalException( "Principal cannot be " + ANONYMOUS_NAMES[i]); } } } return GetterUtil.getLong(name); } |
On a donc juste à réutiliser le code de cette méthode dans un ModelListener pour récupérer le userId courant.