Hallo zusammen,
Ich habe Probleme beim Zugriff auf ein Modellattribut in meinem Controller, unter Verwendung von Spring.
Beim Hinzufügen zum Modell schreibe ich den Statuscode als Schlüssel und den Enumeration-Namen als Wert. Der Statuscode ist z.B. AVAILABLE, NOTAVAILABLE, usw.:
[CODE lang="java" title="Spring-Controller" highlight="3"]String code = status.getCode();
String enumerationName = enumerationService.getEnumerationName(status, currentLocale);
model.addAttribute(code, enumerationName);[/CODE]
Auf meiner JPA-Seite versuche ich, über den Schlüssel (Statuscode, z.B. AVAILABLE) auf den entsprechenden Wert zuzugreifen:
[CODE lang="html" title="View" highlight="8"]<div data-availability>
<c:forEach items="${StockLevelDeliveryStatus.values()}" var="status">
<c:set var="textStyle" value="text-success" />
<c:if test="${status.code.toLowerCase() == 'notavailable'}">
<c:set var="textStyle" value="" />
</c:if>
<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${status}
</div>
</c:forEach>
</div>[/CODE]
Zum Beispiel ist der Wert von status AVAILABLE und das wird in ${status} ausgegeben. Ich möchte jedoch, dass der Wert AVAILABLE als Schlüssel verwendet wird, um mir den korrekten Wert zurückzugeben, den ich oben im Modell festgelegt habe. Wenn ich die Anweisung ${status} stattdessen in, sagen wir, ${AVAILABLE} ändere, was der konkrete Schlüssel ist, wird der entsprechende/richtige Wert aus dem Modell zurückgegeben:
[CODE lang="java" title="View (Direktzugriff auf Modellattribut)" highlight="2"]<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${AVAILABLE}
</div>[/CODE]
Außerdem habe ich versucht, die Map direkt ins Modell zu schreiben...
[CODE lang="java" title="Controller (direktes Schreiben der Map in das Modell)" highlight="5"]Map<StockLevelDeliveryStatus, String> statusMap = new HashMap<StockLevelDeliveryStatus, String>();
for (StockLevelDeliveryStatus status : StockLevelDeliveryStatus.values()) {
statusMap.put(status, enumerationService.getEnumerationName(status, currentLocale));
}
model.addAttribute("statusMap", statusMap);[/CODE]
... um dann, in der View, wie folgt auf das Modellattribut zuzugreifen:
[CODE lang="java" title="View (Zugriff auf Map)" highlight="8"]<div data-availability>
<c:forEach items="${StockLevelDeliveryStatus.values()}" var="status">
<c:set var="textStyle" value="text-success" />
<c:if test="${status.code.toLowerCase() == 'notavailable'}">
<c:set var="textStyle" value="" />
</c:if>
<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${statusMap[status]}
</div>
</c:forEach>
</div>[/CODE]
Hier scheitert es schon beim Zugriff auf das Modell, denn mit diesem Ansatz bekomme ich keine Ausgabe auf der JSP.
Wenn ich es richtig verstehe, dann muss ich, anstatt den Enum-Wert als Schlüssel zu übergeben, Spring irgendwie beibringen, im Modell nach dem entsprechenden Schlüssel zu suchen.
Weiß jemand, wo das Problem zu suchen ist bzw. was hier genau schief läuft?
Vielen Dank im Voraus!
Ich habe Probleme beim Zugriff auf ein Modellattribut in meinem Controller, unter Verwendung von Spring.
Beim Hinzufügen zum Modell schreibe ich den Statuscode als Schlüssel und den Enumeration-Namen als Wert. Der Statuscode ist z.B. AVAILABLE, NOTAVAILABLE, usw.:
[CODE lang="java" title="Spring-Controller" highlight="3"]String code = status.getCode();
String enumerationName = enumerationService.getEnumerationName(status, currentLocale);
model.addAttribute(code, enumerationName);[/CODE]
Auf meiner JPA-Seite versuche ich, über den Schlüssel (Statuscode, z.B. AVAILABLE) auf den entsprechenden Wert zuzugreifen:
[CODE lang="html" title="View" highlight="8"]<div data-availability>
<c:forEach items="${StockLevelDeliveryStatus.values()}" var="status">
<c:set var="textStyle" value="text-success" />
<c:if test="${status.code.toLowerCase() == 'notavailable'}">
<c:set var="textStyle" value="" />
</c:if>
<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${status}
</div>
</c:forEach>
</div>[/CODE]
Zum Beispiel ist der Wert von status AVAILABLE und das wird in ${status} ausgegeben. Ich möchte jedoch, dass der Wert AVAILABLE als Schlüssel verwendet wird, um mir den korrekten Wert zurückzugeben, den ich oben im Modell festgelegt habe. Wenn ich die Anweisung ${status} stattdessen in, sagen wir, ${AVAILABLE} ändere, was der konkrete Schlüssel ist, wird der entsprechende/richtige Wert aus dem Modell zurückgegeben:
[CODE lang="java" title="View (Direktzugriff auf Modellattribut)" highlight="2"]<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${AVAILABLE}
</div>[/CODE]
Außerdem habe ich versucht, die Map direkt ins Modell zu schreiben...
[CODE lang="java" title="Controller (direktes Schreiben der Map in das Modell)" highlight="5"]Map<StockLevelDeliveryStatus, String> statusMap = new HashMap<StockLevelDeliveryStatus, String>();
for (StockLevelDeliveryStatus status : StockLevelDeliveryStatus.values()) {
statusMap.put(status, enumerationService.getEnumerationName(status, currentLocale));
}
model.addAttribute("statusMap", statusMap);[/CODE]
... um dann, in der View, wie folgt auf das Modellattribut zuzugreifen:
[CODE lang="java" title="View (Zugriff auf Map)" highlight="8"]<div data-availability>
<c:forEach items="${StockLevelDeliveryStatus.values()}" var="status">
<c:set var="textStyle" value="text-success" />
<c:if test="${status.code.toLowerCase() == 'notavailable'}">
<c:set var="textStyle" value="" />
</c:if>
<div class="d-none display-22 pb-2 ${textStyle}" data-availability-item data-${status.code.toLowerCase()}>
${statusMap[status]}
</div>
</c:forEach>
</div>[/CODE]
Hier scheitert es schon beim Zugriff auf das Modell, denn mit diesem Ansatz bekomme ich keine Ausgabe auf der JSP.
Wenn ich es richtig verstehe, dann muss ich, anstatt den Enum-Wert als Schlüssel zu übergeben, Spring irgendwie beibringen, im Modell nach dem entsprechenden Schlüssel zu suchen.
Weiß jemand, wo das Problem zu suchen ist bzw. was hier genau schief läuft?
Vielen Dank im Voraus!