微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jsf-2 -f:当使用新的xmlns.jcp.org命名空间时,viewParam不传递必需的参数

我正在尝试使用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>

链接到以下页面movie.xhtml:

<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.        
}

运行索引页面并单击该链接时,该URL会彻底更改为

result.xhtml?id=8

但是没有显示任何数据.它是空白的.我发现#{appLoad.movi​​eId}为空.换句话说,< 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容器.他们目前还没有生产就绪版本.

也可以看看:

> Using new xmlns.jcp.org namespace on composites causes java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putIfAbsent

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。