【问题标题】:JavaServer Faces 2.2 composite component rendered with enclosing <html> ... </html> tags使用封闭 <html> ... </html> 标签呈现的 JavaServer Faces 2.2 复合组件
【发布时间】:2013-10-24 13:45:26
【问题描述】:

在 GlassFish 4 上将项目从 JavaServer Faces 2.1 / Java EE 5 迁移到 JavaServer Faces 2.2 / Java EE 7 Web 配置文件时,我遇到了无效的 HTML 代码,因为在JSF 代码。

环境:Mojarra 2.2.0 (GlassFish 4.0)、NetBeans 7.3.1、JDK 7

重现步骤:

  • 使用 JavaServer Faces 创建一个新的“Java EE 7 Web”项目并选择 JSF 2.2 服务器库
  • 在 index.html 中,选择 HTML 正文(“Hello from Facelets”)并重构为复合组件

示例源代码:

index.html

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ez="http://xmlns.jcp.org/jsf/composite/ezcomp">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ez:test/>
    </h:body>
</html>

test.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://xmlns.jcp.org/jsf/composite">

    <!-- INTERFACE -->
    <cc:interface>
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
        Hello from Facelets
    </cc:implementation>
</html>

实际的 HTML 输出:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2">
        <title>Facelet Title</title></head><body><html xmlns="http://www.w3.org/1999/xhtml">

    <!-- INTERFACE -->

    <!-- IMPLEMENTATION -->
        Hello from Facelets

</html></body>
</html>

这不是有效的 HTML,因为复合组件存在另一个 &lt;html&gt; ... &lt;/html&gt;。我的 JSF 代码有错误吗?

【问题讨论】:

    标签: java jsf jsf-2 jsf-2.2 glassfish-4


    【解决方案1】:

    尝试使用

    <ui:component
        xmlns="http://www.w3.org/1999/xhtml"
    .....
    >
    

    在此处查看示例:http://balusc.blogspot.co.uk/2013/01/composite-component-with-multiple-input.html

    【讨论】:

    • 通过此更改(并添加 ui 命名空间声明 xmlns:ui="http://xmlns.jcp.org/jsf/facelets"),页面现在呈现异常:java.lang.NullPointerException at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1144) at com.sun.faces.util.Cache.get(Cache.java:116) at com.sun.faces.application.view.FaceletViewHandlingStrategy.getComponentMetadata(FaceletViewHandlingStrategy.java:237) ...
    • 你在用GF4吗?如果是这样,我强烈建议使用最新的 jar 更新 javax.faces jar,apckaged 有很多错误。您在命名空间和设置方面是否也遵循了上面的示例?
    • 将 javax.faces 更新到 2.2.4 已修复,非常感谢您的提示
    猜你喜欢
    • 1970-01-01
    • 2018-03-13
    • 2014-04-20
    • 1970-01-01
    • 2017-05-28
    • 2011-04-30
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多