2008-10-02 11 views
30

Il y a une liste déroulante et je veux ajouter l'item "Pas de sélection" à la liste qui devrait me donner "null" quand soumis. J'utilise le contrôleur dérivé SimpleFormController.Spring MVC Etiquettes de formulaire: Existe-t-il un moyen standard d'ajouter un élément "Pas de sélection"?

protected Map referenceData(HttpServletRequest httpServletRequest, Object o, Errors errors) throws Exception { 
    Map<String, Object> map = new HashMap<String, Object>(); 

    map.put("countryList", Arrays.asList(Country.values())); 

    return map; 
} 

Et la partie JSPX est

<form:select path="country" items="${countryList}" title="country"/> 

Une solution possible semble être en ajoutant une valeur nulle au début de la liste, puis en utilisant un PropertyEditor personnalisé pour disply cette « null » comme ' Pas de choix'. Y a-t-il une meilleure solution?

@Edit: J'ai résolu ceci avec une annotation de validation personnalisée qui vérifie si la valeur sélectionnée est "Aucune sélection". Y a-t-il une solution plus standard et plus facile?

Répondre

36

Une option:

<form:select path="country" title="country" > 
    <form:option value="">&nbsp;</form:option> 
    <form:options items="${countryList}" /> 
</form:select> 
+0

Attention à l'utilisation de l'entité nommée ' ' dans les pages jspx (cela a récemment conduit à des erreurs pour moi, indiquant que l'entité n'est pas définie, ou une telle). Il semble plus sûr de se référer à l'espace insécable par son code: ' ' – Michael

+1

De cette façon, NoSelection affichera une chaîne vide, pas 'null', cependant. value = $ {null} devrait être nul. – javabot

0

Je ne pense pas que vous avez besoin d'un éditeur de propriété pour cela. Si l'option "vide" est la première dans la liste, et que la balise qui sort la liste ne marque aucune d'entre elles comme sélectionnée, alors le navigateur doit sélectionner automatiquement le premier, "vide".

Lorsque vous soumettez le formulaire, essayez de travailler pour que la valeur "vide" soit liée à votre commande sous forme de null, ce qui peut arriver automatiquement, selon le type.