Java MyFaces@ManagedBean中的Lambda导致丢失/异常行为

Java MyFaces@ManagedBean中的Lambda导致丢失/异常行为,java,lambda,maven-3,java-8,myfaces,Java,Lambda,Maven 3,Java 8,Myfaces,我有一个小项目 文件src/main/java/com/mycompany/mavenproject2/Root.java: package com.mycompany.mavenproject2; 导入java.io.IOException; 导入java.io.PrintWriter; 导入java.util.function.Supplier; 导入javax.servlet.annotation.WebServlet; 导入javax.servlet.http.HttpServlet;

我有一个小项目

文件
src/main/java/com/mycompany/mavenproject2/Root.java

package com.mycompany.mavenproject2;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.function.Supplier;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
@WebServlet(“/”)
公共类根扩展HttpServlet{
@凌驾
受保护的无效数据集(HttpServletRequest请求,
HttpServletResponse(响应)
抛出IOException{
供应商welcomeMsg=()->“你好,世界!我是兰姆达。”;
PrintWriter=response.getWriter();
writer.println(welcomeMsg.get());
}
}
文件
src/main/java/com/mycompany/mavenproject2/hellobackbean.java

package com.mycompany.mavenproject2;
导入java.util.function.Supplier;
导入javax.faces.bean.ManagedBean;
@ManagedBean
公共类HelloBackbean{
公共字符串getMessage(){
if(false){
供应商消息=()->“来自lambda的你好”;
返回msg.get();
}否则{
返回“Hello from string literal”;
}
}
}
在文件
src/main/webapp/hello.xhtml
中:


测试页
#{hellobackbean.message}

pom.xml
中:


4.0.0
com.mycompany
mavenproject2
0.1
战争
UTF-8
1.8
1.8
爪哇
JavaEEAPI
7
假如
org.apache.myfaces.core
MyFacesImpl
2.2.5
运行时
org.eclipse.jetty
jetty maven插件
9.2.5.v20141112
1.
使用
mvn jetty:Run
运行站点。我使用的是Maven版本3.2.1

问题 如果我在
hellobackbean
be
true
中有布尔文本,那么当我访问
localhost:8080/faces/hello.xhtml
时,不会显示任何内容。但是,如果我将其更改为
false
(如上所述),我将看到“Hello from string literal”,正如预期的那样

这让我得出结论,lambda的存在正是导致MyFaces/JSF行为不端的原因。
localhost:8080/
进一步证实了这一点,它由
Root
类提供动力,该类使用lambda获取其消息并按预期工作

我的问题是:为什么我的lambda用法在这个项目中不起作用?此外,为什么我没有收到某种错误消息?我查对地方了吗?当我访问
localhost:8080/faces/hello.xhtml
时,在终端中看不到任何活动


还值得注意的是,我假设
javac
将完全忽略
if(false)
块中的代码。如果没有。。。好。。。然后我甚至不知道这是如何工作的,或者出了什么问题……

JSF2.2与JDK6兼容,而不是JDK8。但最近,一个补丁提交了。它已经提交,将在MyFaces 2.2.7发布后提供,这将很快完成。它应该能解决你的问题


如果您对MyFaces有任何疑问或可能的bug,请发送电子邮件至。如果它是一个已确认的bug,请报告。

…为什么要进行否决表决?您使用的是哪个JDK 8(以及MyFaces、AppServer)版本?如果不是的话,试试最新版本。我正在使用MyFaces2.2.5(如POM中所列)。我正在工作,所以我无法确切检查它使用的Jetty版本,但它也是相对较新的,因为Maven Jetty插件版本是2014-11-12(也在POM中)。由于我正在工作,我无法检查我的JDK版本,但它相对较新,并且支持lambdas,因为servlet响应使用了lambda。您是否能够让示例顺利运行?在我的小型/常规测试中,它在GlassFish Server 4.1上运行良好,前提是它使用JDK 8u20或更高版本(否则,调用远程EJB会有一些问题)。在使用Spring框架的Tomcat8.x(在我的例子中,它是8.0.9.0)上也很好。我不熟悉其他服务器。我目前正在使用JDK 8u25。我在JSF管理的bean、CDI管理的bean和EJB中尝试了相同的lambda表达式,或者在GlassFish 4.1(具有JSF 2.2.8-02)上的实际应用程序中进行了尝试。在Spring管理的bean和Spring服务中,Tomcat8.0.9.0(具有Spring4.0GA、JSF2.2.8-02)也尝试了同样的方法。表达式在所有情况下都成功执行(不包括EclipseLink有一个计划在其版本2.6.0中修复的表达式。因此,lambda表达式目前不能在实体类中使用)。不太清楚Eclipse码头。