Come eseguo Java 8 lambda nei file JSP
Questo è un progetto Java JSP con gestione Maven e Jetty in esecuzione in locale.
Ho un problema in cui ottengo questo errore quando si tenta di eseguire lambda in .jspffile: Lambda expressions are allowed only at source level 1.8 or above.
La mia configurazione:
- Nella struttura del progetto in Intellij IDEA ho impostato Project SDK e Project language su Java 8.
- Il livello del linguaggio del modulo è 8: Lambda, annotazioni di tipo ecc.
- Utilizzando
<maven.compiler.source>1.8</maven.compiler.source>e<maven.compiler.target>1.8</maven.compiler.target> - La versione del bytecode del progetto è impostata su 1.8
- Ultima versione di Jetty (v9.4.31.x)
- Il progetto utilizza il
jetty-jspc-maven-pluginplugin dove ho impostatosourceVersionetargetVersion1.8 in<configuration>
C'è qualcosa che mi manca o Java 8 semplicemente non è possibile con JSP / jspc
Risposte
L'esistente https://github.com/jetty-project/embedded-jetty-jspha un esempio di configurazione di compilerSourceVMe compilerTargetVMper consentire *.jspai file di utilizzare le funzionalità di Java 8, come lambda.
Fondamentalmente configuri il tuo JettyJspServlet
// Create / Register JSP Servlet (must be named "jsp" per spec)
ServletHolder holderJsp = new ServletHolder("jsp", JettyJspServlet.class);
holderJsp.setInitOrder(0);
holderJsp.setInitParameter("logVerbosityLevel", "DEBUG");
holderJsp.setInitParameter("fork", "false");
holderJsp.setInitParameter("xpoweredBy", "false");
holderJsp.setInitParameter("compilerTargetVM", "1.8");
holderJsp.setInitParameter("compilerSourceVM", "1.8");
holderJsp.setInitParameter("keepgenerated", "true");
servletContextHandler.addServlet(holderJsp, "*.jsp");
Sono andato avanti e ho aggiunto un lambda.jsp che utilizza un semplice lambda all'interno di un JSP per dimostrarlo. (lambda mescolato con JspWriter di jsp è piuttosto complicato, non è stata la migliore scelta di esempio a vista d'occhio)