簡體   English   中英

如何在 JSP 文件中運行 Java 8 lambda

[英]How do I run Java 8 lambda in JSP files

這是一個帶有Maven管理的Java JSP項目,在本地運行Jetty。

我在嘗試在.jspf文件中運行 lambda 時遇到此錯誤的問題: Lambda expressions are allowed only at source level 1.8 or above

我的設置:

  • 在 Intellij IDEA 的項目結構中,我將項目 SDK 和項目語言設置為 Java 8。
  • 模塊語言級別為 8 - Lambdas、類型注釋等。
  • 使用<maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>
  • 項目字節碼版本設置為 1.8
  • 最新版本的 Jetty (v9.4.31.x)
  • 該項目正在使用jetty-jspc-maven-plugin插件,我在<configuration>中將sourceVersiontargetVersion設置為 1.8

有什么我遺漏的嗎,或者 JSP/jspc 根本不可能使用 Java 8

現有的https://github.com/jetty-project/embedded-jetty-jsp有一個設置compilerSourceVMcompilerTargetVM的示例,以允許您的*.jsp文件使用 Java 8 功能,如 lambda 的。

基本上你配置你的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");

我繼續添加了一個lambda.jsp ,它在 JSP 中使用一個簡單的 lambda 來證明這一點。 (lambda 與 jsp 的 JspWriter 混合相當復雜,事后看來它不是示例的最佳選擇)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM