我正在尝试使用Glassfish 4.0和
Java EE 7 XML命名空间来测试下面的示例.
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:f="http://xmlns.jcp.org/jsf/core"> <h:head> <title>Title</title> </h:head> <h:body> <h:form> <ul> <ui:repeat value="#{appLoad.movieList}" var="movie"> <li> <h:link value="#{movie.title}" outcome="movie" includeViewParams="true"> <f:param name="id" value="#{movie.id}"/> </h:link> </li> </ui:repeat> </ul> </h:form> </h:body> </html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:f="http://xmlns.jcp.org/jsf/core"> <h:head> <f:Metadata> <f:viewParam name="id" value="#{appLoad.movieId}"/> <f:event listener="#{appLoad.movieDetail()}" type="preRenderView"/> </f:Metadata> </h:head> <h:body> <h:form> <h:panelGrid columns="2"> <h:panelGrid columns="1" width="400"> <h:panelGrid columns="1"> Title : <h:outputLabel value="#{appLoad.movie.title}"/> </h:panelGrid> </h:panelGrid> </h:panelGrid> </h:form> </h:body> </html>
#{appLoad}支持bean是
@ManagedBean @RequestScoped public class AppLoad { @EJB private MovieFacade movieFacade; private Movie movie = new Movie(); private List<Movie> movieList; private int movieId; @postconstruct public void movieDetail(){ movieList = movieFacade.findAll(); movie = movieFacade.find(movieId); System.out.println(movieId); } // Getters+setters. }
result.xhtml?id=8
但是没有显示任何数据.它是空白的.我发现#{appLoad.movieId}为空.换句话说,< f:viewParam>不设置此请求参数.
我唯一的工作是将XML命名空间更改回旧版本.
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core">
我猜我在这里弄错了.这个问题是如何引起的,我应该如何使用新的XML命名空间?
解决方法
第一个Mojarra版本2.2.0和2.2.1中打破了处理新的xmlns.jcp.org XML命名空间的方式.它已在
Mojarra 2.2.2中修复(注意:链接中的票据描述了不同的问题症状,但在封面下,它基本上是相同的原因).建议升级到Mojarra 2.2.2. GlassFish 4.0捆绑了Mojarra 2.2.0.您可以从
javaserverfaces.java.net获取JAR.您需要做的就是用更新的版本替换GlassFish的/ modules文件夹中的javax.faces.jar文件.
这种麻烦在第一个主要的GlassFish发布版本中并不罕见(所有这些都是准时准备好的).我建议等待使用Java EE 7,直到GlassFish 4.0.1或4.1发布,以避免将来出现意外.请注意,Apache Tomcat和JBoss AS等其他供应商需要花时间发布稳定的Java EE 7容器.他们目前还没有生产就绪版本.
也可以看看: