J'espère que je serai en mesure de l'expliquer correctement. Je développe un portlet pour Liferay en utilisant Spring. C'est un système de tableau. J'ai donc une vue (Jsp) qui montre le détail d'une certaine entrée de tableau, étant donné son identifiant. En outre, il y a un lien qui va à un AddCommentController pour ajouter un nouveau commentaire à l'entrée de panneau que l'utilisateur surveille actuellement. Le AddCommentController étend SimpleFormController de printemps et a également un validateur qui s'y rattachent:Garder les paramètres de la requête sur Spring SimpleFormController avec Validator
<bean id="addCommentController" class="com.lifepin.controllers.AddCommentController" parent="lifePinControllerTemplate">
<property name="formView" value="addComment" />
<property name="successView" value="viewEntryDetail" />
<property name="validator" ref="commentValidator"/>
</bean>
Le validateur est très simple et se présente comme suit:
public class CommentValidator implements Validator {
public boolean supports(Class clazz) {
return clazz.equals(Comment.class);
}
public void validate(Object obj, Errors validationError) {
ValidationUtils.rejectIfEmptyOrWhitespace(validationError, "content", "err.content.empty", "This value is required");
}
}
Maintenant, le point de vue où l'utilisateur peut entrer son commentaire a deux boutons, Enregistrer et annuler. Voici les deux générateurs pour les urls correspondantes.
<portlet:actionURL var="actionUrl">
<portlet:param name="action" value="addComment"/>
<portlet:param name="pinboardEntryId" value="${param.pinboardEntryId}"/>
</portlet:actionURL>
<portlet:renderURL var="cancelUrl">
<portlet:param name="action" value="viewPinboardEntry"/>
<portlet:param name="pinboardEntryId" value="${param.pinboardEntryId}"/>
</portlet:renderURL>
Dans le onSubmitAction du AddCommentController je lis le paramètre (voir le 1er actionURL ci-dessus) et le transmettre à la ActionResponse S.T. dans la vue détaillée de l'entrée du tableau, je peux à nouveau charger l'entrée et l'afficher.
public class AddCommentController extends SimpleFormController{
...
@Override
protected void onSubmitAction(ActionRequest request, ActionResponse response, Object command, BindException bindException)
throws Exception {
long pinboardEntryId = PortletRequestUtils.getLongParameter(request, ParameterNameConstants.PINBOARDENTRY_ID, -1);
...
}
...
}
Tout cela fonctionne très bien, sauf lorsqu'une erreur de validation se produit. Dans ce cas, je perds le paramètre "pinboardEntryId" de l'URL, et je n'ai aucun moyen de lire ce paramètre dans le CommentValidator pour le passer à la réponse à nouveau puisque je n'ai aucune réponse ou PortletRequest. Pour l'instant, j'ai résolu ce problème en stockant l'ID sur la session et en le récupérant à partir de là. Je voulais cependant demander si certains d'entre vous ont une solution alternative sans avoir à utiliser la session. Je suis sûr qu'il y en a un.
Merci,
Juri
cool, j'ai déjà terminé le projet, mais merci pour l'indice. – Juri