Aufruf einer Methode mit parameter innerhalb JSTL-Schleife

Ich habe eine JSP, die muss zum drucken text, das hergestellt wird, indem die loop-iterator und Einspeisung zu einem anderen Objekt (Spring bean), so etwas wie:

<c:forEach var="myVar" items="${myVars}">
   <c:out value="anotherObject.getFoo(myVar)"/>
</c:forEach>

Offensichtlich der obige code ist nicht gültig als JSTL . Betreiber nur erlaubt parameter-weniger Aufrufe. Ich sehe folgende Lösungen für das problem:

1) Scriptlets

<c:forEach var="myVar" items="${myVars}">
  <%
    SomeType myVar = (SomeType) pageContext.getAttribute("myVar");
    SomeOtherType anotherObject = (SomeOtherType) pageContext.getAttribute("anotherObject");
    YetAnotherType result = anotherObject.getFoo(myVar);
    pageContext.setAttribute("result", result);
  %>
  <c:out value="${result}"/>
</c:forEach>

Die offensichtliche con hier ist JSP-code Verschmutzung und Allgemeine Hässlichkeit.

2) Schreiben von einem tag, das tut, was auch immer geschieht innerhalb von scriptlets. Typisches Beispiel für over-engineering, igitt!

3) Zerlegen Sie eine Sammlung von myVars und ersetzen Sie jedes myVar mit einem dynamische proxy, InvocationHandler würde, die zusätzliche parameter-weniger-Methode, um alle getFoo() Anrufe über anotherObject. All das geschieht in den controller so JSP würden sauber bleiben und myVar bleibt die gleiche. Aber zu welchem Preis?

Kann ich nicht hinzufügen .getFoo() Methode, um die myVar weil es nicht passt und es würde brechen, die Trennung von Bedenken.

Sieht es aus wie die übergabe von Parametern möglich sein wird in JSP/EL 2.2, aber ich bin mit Tomcat 6.0.29, die nur die bundles EL 2.1 API.

Frage: kann jeder jeden schlagen der sauberste Ansatz für diese situation?

InformationsquelleAutor mindas | 2011-07-20
Schreibe einen Kommentar