当前位置: 首页 > 面试题库 >

是否可以将JSF + Facelets与HTML 4/5一起使用?

樊奇思
2023-03-14
问题内容

Facelets依赖XML名称空间来与XHTML一起使用。HTML 4怎么样,据我所知,HTML 5不支持名称空间。HTML
5还具有XHTML中不可用的一些新元素。甚至HTML 4和XHTML在它们支持的元素和属性上也有一些差异。

问题是:是否可以使用Facelets呈现HTML 4/5文档?如果是这样,怎么办?


问题答案:

由于Facelets是一种基于XML的视图技术,本质上可以吃掉并发出XML标记,因此您不能将其与HTML4文档类型一起使用。所述HTML4
DOCTYPE描述了几种元件,其不能自封闭,如<link><meta><br><hr>。然而,随着XML你不得不关闭它们像<link/><meta/>等于是使用HTML4DOCTYPE是绝对不能用于Facelets的一个选项(也就是,当你尊重的标准和/或恐惧W3验证,它将但是很好地工作在大多数(如果不是全部)网络浏览器上)。

另一方面,HTML5允许XML标记。这在第3.2.2章-元素中指定:

例:

 <link type="text/css" href="style.css"/>

作者还可以选择对HTML语法中的void元素使用相同的语法。一些作者还选择在斜杠之前包含空格,但这不是必需的。(以这种方式使用空格是从XHTML 1.0附录C中的兼容性准则继承的约定。)

<!DOCTYPE html>即使<?xml?>页面顶部没有声明,我自己也一直使用JSF / Facelets。它在所有浏览器中均可完美运行。对于XHTML文档类型,您应该按照规范使用Content-Typeapplication/xhtml+xml而这只会使MSIE感到窒息(它不理解)。而且,由于它仍然是使用最广泛的浏览器之一…用替换XHTML内容类型text/html被认为是有害的,您也不想这样做。

根据您的论点:

HTML 5不支持名称空间。

没关系 名称空间仅对基于XML的服务器侧视图技术(如Facelets)感兴趣,后者又可以使用这些标签生成纯HTML。以下示例对Facelets合法有效:

<!DOCTYPE html>
<html lang="en"
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Title</title>
    </h:head>
    <h:body>
        <h:outputText value="#{bean.text}" />
    </h:body>
</html>

这将呈现合法有效的HTML5(对于客户端):

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Title</title>
    </head>
    <body>
        Some text
    </body>
</html>

您会看到,Facelets已经删除了XHTML声明,因为它们在客户端没有意义。

和,

此外,HTML 5还具有XHTML中不可用的一些新元素。

这也没有道理。全部与生成的输出有关。哪个可以和HTML5一样好。您唯一的问题可能是浏览器支持以及呈现HTML5特定元素的第三方JSF组件的可用性。从JSF2.2开始,可以使用新的直通元素功能将自定义元素转换为JSF组件。只需给HTML5元素一个jsf:id属性即可。它将在内部透明地解释为UIPanelJSF组件树中的实例(如<h:panelGroup>)。

<!DOCTYPE html>
<html lang="en"
    xmlns:jsf="http://xmlns.jcp.org/jsf"
    xmlns:f="http://xmlns.jcp.org/jsf/core" 
    xmlns:h="http://xmlns.jcp.org/jsf/html"
>
    <h:head>
        <title>Title</title>
    </h:head>
    <h:body>
        <header jsf:id="header">Header</header>
        <nav jsf:id="nav">Nav</nav>
        <main jsf:id="main">Main</main>
        <footer jsf:id="footer">Footer</footer>
    </h:body>
</html>

您甚至可以像从中一样从ajax引用它<f:ajax render="main">

实际上,XHTML被夸大了。其唯一目的是使用基于XML的工具简化HTML开发,该工具可以在服务器端(例如Facelets)操纵/转换/生成HTML页面。但是一些入门者也使用它而不使用任何XML工具,并按原样输出它,因为它“很酷”(出于某些不清楚的原因)。

不要误会我的意思。XHTML非常_适合_作为服务器侧视图技术。但是根本不作为客户端标记技术。它在客户端完全没有价值。



 类似资料:
  • 我想让flume代理位于hadoop集群之外,并想知道是否有可能使用flume通过WebHDFS向hadoop集群发送消息。 如果没有,是否有使用WebHDFS的替代方案?使用多层水槽层仍然需要我在hadoop集群中运行水槽代理。

  • 是否可以在AWS Lambda中构建一个函数来创建websocket并将数据发送到订阅的应用程序? 类似这样: John在他的手机中打开了应用程序SuperPhotoApp,但决定使用桌面浏览器将照片上传到SuperPhotoApp服务(S3 Bucket),此事件执行创建套接字的Lambda函数。io服务器并将更新推送到所有订户,他的手机打开了应用程序,因此应用程序会自动更新新照片。 这可以通过

  • 问题内容: 我对正则表达式很糟糕,但是我想知道是否可以将ng-pattern与变量一起使用 例如, 其中validationCode是控制器中附加到$ scope的变量 如果 则ng-pattern将是 但这不起作用,似乎我需要创建一个我真的不想要的自定义指令 问题答案: 需要一个正则表达式。 从Angular的文档中有关: 如果该值与模式表达式不匹配,则设置模式验证错误键。期望值用于内联模式或定

  • 我对Spring webflux和protobuf都是新手。我一直在读一些东西,我发现它们之间有一些相似之处。喜欢 Spring webflow可以部署在netty上,gRPC也是如此。 两者都适用于流数据。 这两个框架都在某种程度上基于观察者设计模式,支持基于均匀的数据处理方法。 然而,我仍然找不到任何结合webflux(反应式编程)、gRPC(更快的数据编码和解码)和Spring(依赖注入)功

  • 我一直使用ElasticsearchIntegrationTest在没有elasticsearch服务器的情况下测试我的代码。我的类中的私有成员很少,所以考虑使用Powermock访问私有成员。在运行测试时,我得到异常。 Powermock是否可以与ElasticSearchintegrationTest一起使用?? 代码: 例外情况: 原因:javassist.CanNotCompileExce

  • 同时尝试将Vavr的不可变映射(接口时,我没有设法获得要编译的代码-至少没有使用。of()io中的静态方法。vavr。收集HashMap。 本质上,这就是我使用的Maven依赖关系: 使用Java 1.8 代码如下: 这是我得到的错误: 不兼容的类型。必需的映射,但已将“of”推断为HashMap:不存在类型变量K,V的实例,因此HashMap符合映射 知道如何将的实例分配给吗?这可能吗? 根据留