Es ist nicht genau wahr, dass Sie es nicht tun können, aber die Lösung ist nicht ganz geradlinig. Das Problem ist, dass EL die Zeichenfolge, die Sie als Map-Schlüssel übergeben, nicht in die entsprechende Enumeration für Sie konvertiert. Daher verwendet $ {map ['One']} nicht die Enum-Konstante MyEnum.One in der Map-Suche.
Ich stieß auf das gleiche Problem und wollte nicht mit einem String-Keyed-Map zurückgehen, so war die Herausforderung dann in JSTL, wie die tatsächliche Enum-Referenz in der Map-Lookup verwendet werden.
Erforderlich ist, die Enum-Konstanten in den Bereich der JSP zu bekommen, damit Sie dann die eigentliche Enum selbst als Schlüssel verwenden können. Um dies zu tun, in der Steuerung Sie etwas tun, wie folgt aus:
for (MyEnum e : MyEnum.values()) {
request.putAttribute(e.toString(), e);
}
Was haben Sie hier gemacht wird Variablen in den Anwendungsbereich wie die String-Darstellung des Enum genannt hinzugefügt. (Sie könnten natürlich Namensgebung Probleme vermeiden, indem Sie die e.toSring vorangestellt() mit einem Wert)
Nun, wenn Sie die folgenden
${map[ONE]}
tun, werden Sie die tatsächliche Enum werden mit konstanter als Schlüssel und wird daher den entsprechenden Wert von der Karte erhalten. (Bemerken gibt es keine Anführungszeichen ONE, das ist, weil Sie die Anfrage Attribut ONE in diesem Fall verweisen, das wurde oben hinzugefügt)
Verwenden Sie die benutzerdefinierte el-Funktion - es ist die wartungsfreundlichste Art und Weise. – Chii