Afficher les valeurs de l'enum sur GSP page, puis de les lier dans la base de données
J'ai un cas d'utilisation dans lequel j'ai besoin de montrer d'abord la valeur de enum
sur le SPG page sous forme de liste déroulante, demandez à l'utilisateur de sélectionner l'une de ces valeurs, et puis enfin de lier les données du domaine.
Donc mon code sur GSP ressemble à mon enum est MyEnum
<g:select from="${MyEnum.getAllEnumList()}" optionValue="name" name="duration"/>
mon enum est
public enum MyEnum {
MIN15('15 Minutes'),
MIN30('30 Minutes'),
HOUR1('1 Hour'),
HOUR2('2 Hours'),
HOUR5('5 Hours'),
HOUR8('8 Hours'),
HALFDAY('half day'),
FULLDAY('full day')
private final String name
private final String displayName
public static final List<MyEnum> getAllEnumList() {
[MIN15,MIN30,HOUR1,HOUR2,HOUR5,HOUR8,HALFDAY,FULLDAY]
}
public String toString() {
return displayName
}
MyEnum(String name,String displayName) {
this.name = name
this.displayName = displayName;
}
}
quand j'ai frappé à la page de son montrant une erreur de ce type:
Error processing GroovyPageView: Error executing tag <g:form>: Error evaluating expression [MyEnum.getAllEnumList()] on line [37]: java.lang.NoClassDefFoundError: Could not initialize class ENUM.MyEnum at D:/myspace/projects/IcepushpluginSampleApp/grails-app/views/util/test.gsp:46
Des idées ????
OriginalL'auteur Nikhil Sharma | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
C'est comment je l'ai fait dans le passé. De cette façon, vous avez support i18n.
gsp
messages.propriétés
OriginalL'auteur Nick Larson
Vous pouvez éviter d'importer dans votre gps (ce qui est un peu moche) si vous utilisez un bibliothèque de balises personnalisées. Vous aurez également besoin d'ajouter une autre méthode (
getKey()
) à votreenum
si vous voulez avoir l'option de clé différente de sa valeur.MyEnum.groovy
MyEnumTagLib.groovy
gsp
OriginalL'auteur Rob Hruska
Essayez ceci en haut de votre gps (avec le chemin d'accès complet ajusté à vos packages, bien sûr).
Modifier (cela devrait fonctionner (votre enum syntaxe est faux aussi)):
Et puis la version révisée de la classe:
Edit2:
La façon la plus simple pour éviter tout ça (à la fois la deuxième réponse ici, et ma solution) est tout simplement de passer la valeur de la liste à la spg du contrôleur. Ajoutez simplement
ou quelque chose de similaire à votre contrôleur de retour.
<%@ page import="ENUM.MyEnum" contentType="text/html;charset=UTF-8" %>
Tout d'abord, votre syntaxe est mauvaise, la MAJUSCULE s'étoffe d'un nom de variable, pas un paramètre. De sorte que vous pouvez supprimer le nom de la partie. Deuxièmement, vos n'avez pas besoin d'ajouter le contentType attribut pour l'importation de classes. Troisièmement, il travaille ici, quand je l'ai tester avec vos classes, sera mise à jour de répondre à l'essentiel.
Vous avez besoin d'importer la classe enum, pas la constante enum
<%@ page import="fully.qualified.path.MyEnum" %>
le
getAllEnumList()
méthode est redondant, tous les enum, prévoit déjà unevalues()
méthode qui fait la même choseOriginalL'auteur Oliver Tynes