Una delle cose che mi ha sempre infastidito su <jsp:include..>
è che non è possibile passare valori non String nella pagina inclusa come input distinti alla pagina. Ad esempio, vorrei essere in grado di effettuare le seguenti operazioni:jsp Enchanced: include implementazione
<c:forEach var="item" items="${listOfItems}">
<jsp:include page="mypage.jsp">
<jsp:attribute name="item" value="${item}/>
</jsp:include>
</c:forEach>
L'idea è che, dichiarando l'elemento essendo passata come attributo all'interno della jsp: include nodo, il codice sta rendendo chiaro quale era l'intento ... di fornire quel parametro alla pagina inclusa.
L'unico meccanismo attualmente disponibile per farlo è definire l'attributo "globalmente", quindi lasciare che la pagina inclusa lo legga dallo spazio globale. Sfortunatamente, questo perde lo stesso "intento" che utilizza il jsp <: il parametro > fornisce. Inoltre, rende il codice più difficile da eseguire il debug, per la stessa ragione per cui sono presenti globals in qualsiasi ambiente di programmazione.
Qualcuno sa di un'implementazione di un meccanismo di inclusione che esegue le funzioni di jsp: include, ma consente di passare valori non stringa? O, in caso contrario, sarei aperto a idee alternative che preservino lo stesso obiettivo di intento e facilità di debug.
Come nota a margine, mi piacerebbe vedere un meccanismo integrato "catturare" per quando il pagina inclusa genera un errore:
<abc:include page="mypage">
<abc:param name="something" value="some string value"/>
<abc:attribute name="somethingelse" value="${nonStringValue}"/>
<abc:catch var="ex">
The page failed, so the content it generated will not be sent to the output
stream. Instead, we can collapse the part of the page that it's content
would be... possibly putting a comment in the page with
<!-- There was an exception generating this module:
<c:out value="${ex.getMessage}/>
-->
</abc:catch>
</abc:include>
Quindi, mi sento male segnando la mia risposta come "la risposta", ma davvero non ho ottenuto quello che cercavo altrove. Sono state fornite informazioni utili, ma ho finito per doverle combinare e usarlo per sviluppare la mia implementazione. – RHSeeger