JSF返回空白/未解析的页面,其中包含纯/原始XHTML / XML / EL源代码而不是呈现的HTML输出

前端之家收集整理的这篇文章主要介绍了JSF返回空白/未解析的页面,其中包含纯/原始XHTML / XML / EL源代码而不是呈现的HTML输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些Facelets文件,如下所示.
WebContent
 |-- index.xhtml
 |-- register.xhtml
 |-- templates
 |    |--userForm.xhtml
 |    `--banner.xhtml
 :

两个页面都使用/ templates目录下的模板.我的/index.xhtml在浏览器中打开.我得到生成的HTML输出.我在/index.xhtml文件中有一个链接到/register.xhtml文件.但是,我的/register.xhtml没有得到解析,并返回为纯XHTML / raw XML而不是生成的HTML输出.当我在浏览器中右键单击页面代码,然后我仍然看到XHTML源代码,而不是生成的HTML输出.看起来模板没有被应用.

但是,当我在浏览器的地址栏中打开/register.xhtml,如/faces/register.xhtml,则会正确显示.这是怎么回事,怎么解决呢?

解决方法

主要有三个原因.

> FacesServlet不被调用.
> XML命名空间URI丢失或错误.
>已经加载了多个JSF实现.

1.确保URL匹配FacesServlet映射

链接的URL(浏览器地址栏中显示的网址)必须与< url-pattern>的FacesServlet在web.xml中定义,以便让所有的JSF工作运行. FacesServlet负责解析XHTML文件,收集提交的表单值,执行转换/验证,更新模型,调用操作和生成HTML输出.如果您没有通过URL调用FacesServlet,那么您将获得的所有(通过右键单击,浏览器中的“查看源代码”)确实是原始的XHTML源代码.

如果< url-pattern>例如* .jsf,则链接应指向/register.jsf而不是/register.xhtml.如果像例如/ faces / *一样,那么链接应该指向/faces/register.xhtml而不是/register.xhtml.避免这种混淆的一种方法是只是更改< url-pattern>从/ faces / *到* .xhtml.以下是理想的映射:

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

如果您无法更改< url-pattern>到* .xhtml因为某些原因,那么你可能也想防止endusers通过URL直接访问XHTML源代码文件.在这种情况下,您可以添加< security-constraint>在< url-pattern>上* .xhtml与一个空的< auth-constraint>在web.xml中阻止:

<security-constraint>
    <display-name>Restrict direct access to XHTML files</display-name>
    <web-resource-collection>
        <web-resource-name>XHTML files</web-resource-name>
        <url-pattern>*.xhtml</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

即将到来的JSF 2.3将通过在webapp启动期间自动注册* .xhtml的URL模式来自动注册FacesServlet来解决上述所有问题.

也可以看看:

> Set default home page via <welcome-file> in JSF project
> Opening Facelets page errors with “This XML file does not appear to have any style information associated with it.”
> JSF Facelets: Sometimes I see the URL is .jsf and sometimes .xhtml. Why?
> JavaServer Faces 2.2 and HTML5 support,why is XHTML still being used
> Which XHTML files do I need to put in /WEB-INF and which not?
> Our servlets wiki – 了解有关servlet的强制性基础知识

2.确保XML命名空间与JSF版本匹配

自引入JSF 2.2以来,另一个可能的原因是XML命名空间与JSF版本不匹配.如下所示的xmlns.jcp.org是JSF 2.2以来的新功能,并且在较旧的JSF版本中不起作用.症状几乎与FacesServlet未被调用相同.

<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

如果无法升级到JSF 2.2,则需要使用旧的java.sun.com XML命名空间:

<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

也可以看看:

> Which XML namespace to use with JSF 2.2
> JSF tags not executed
> Warning: This page calls for XML namespace http://xmlns.jcp.org/jsf/XXX declared with prefix XXX but no taglibrary exists for that namespace

已经加载了多个JSF实现

一个更可能的原因是多个JSF实现已被您的webapp加载,彼此冲突和破坏.例如,当您的webapp的运行时类路径被多个不同版本化的JSF库或特定的Mojarra 2.x Tomcat 8.x组合污染时,当webapp的web.xml中有一个不必要的ConfigureListener条目导致它被加载两次.

<!-- You MUST remove this one from web.xml! -->
<!-- This is actually a workaround for buggy GlassFish3 and Jetty servers. -->
<!-- When leaving this in and you're targeting Tomcat,you'll run into trouble. -->
<listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

使用Maven时,请确保以正确的方式声明依赖关系,并且了解依赖关系范围.重要的是,当目标服务器已经提供这些依赖关系时,不要在webapp中捆绑依赖关系.

也可以看看:

> Configuration of com.sun.faces.config.ConfigureListener
> How to properly install and configure JSF libraries via Maven?

确保你学习JSF正确的方法

对于不熟悉基本的HTTP,HTMLServlets用户,JSF有一个非常陡峭的学习曲线.互联网上有很多低质量的资源.请忽略由业余爱好者维护的代码段抓取网站,主要关注广告收入而不是教学,如roseindia,tutorialspoint,javabeat等.他们很容易被令人不安的广告链接/横幅识别.也请忽略处理侏罗纪JSF 1.x的资源.它们可以通过使用JSP文件而不是XHTML文件来识别.自2009年JSF 2.0以来,JSP作为视图技术已被淘汰.

要开始正确的方法,从our JSF wiki page开始订购一个authoritative book.

也可以看看:

> Java EE web development,where do I start and what skills do I need?
> What is the need of JSF,when UI can be achieved from CSS,HTML,JavaScript,jQuery?

原文链接:https://www.f2er.com/html/224644.html

猜你在找的HTML相关文章