java <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16671591/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 23:37:07  来源:igfitidea点击:

<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>

javajsfprimefacesjboss6.x

提问by Princesse

When I add the following line in the faces-config.xml file:

当我在 faces-config.xml 文件中添加以下行时:

" <application><view-handler>com.sun.facelets.FaceletViewHandler</view-handler></application> "

eclipse says:

eclipse 说:

" view-handler references to "com.sun.facelets.FaceletViewHandler" that does not implement interface javax.faces.application.ViewHandler

configure problem severity for preference 'invalid view handler' "

However, I added the libraries in the "lib" of "WEB-INF" of my jsf project. When I deploy my ear and jsf projects, they deploy correctly, but the execution of my jsf page, I get an error:

但是,我在我的 jsf 项目的“WEB-INF”的“lib”中添加了这些库。当我部署我的 ear 和 jsf 项目时,它们部署正确,但是执行我的 jsf 页面时,我收到一个错误:

" javax.servlet.ServletException: /AddUser.xhtml @9,9 <h:head> Tag Library supports namespace: http://java.sun.com/jsf/html, but no tag
was defined for name: head
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606) "

and in the console, I have:

在控制台中,我有:

14:05:49,420 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/primefaces-3.5.jar/META-INF/primefaces-p.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/primefaces-3.5.jar/META-INF/primefaces-p.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/primefaces-3.5.jar/META-INF/primefaces-p.taglib.xml@5,17]
...
14:05:49,450 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-fn.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-fn.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-fn.taglib.xml@47,31]
...
14:05:49,469 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-core.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-core.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/jstl-core.taglib.xml@47,31]
...
14:05:49,479 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/ui.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/ui.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/ui.taglib.xml@47,31]
...
14:05:49,479 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/facelets_jsf_core.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/facelets_jsf_core.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/facelets_jsf_core.taglib.xml@47,31]
...
14:05:49,479 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/composite.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/composite.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/composite.taglib.xml@47,29]
...
14:05:49,489 GRAVE [facelets.compiler] Error Loading Library: vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/html_basic.taglib.xml: java.io.IOException: Error parsing [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/html_basic.taglib.xml]: 
...
Caused by: org.xml.sax.SAXException: Error Handling [vfs:/C:/Users/citech/Desktop/testjsf/jsf/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_6.x_Runtime_Server1368781328313/deploy/helloworldjsf.war/WEB-INF/lib/jsf-impl-2.1.6.jar/com/sun/faces/metadata/taglib/html_basic.taglib.xml@47,31]
...
14:05:49,499 GRAVE [facelets.viewhandler] Error Rendering View[/AddUser.xhtml]: com.sun.facelets.tag.TagException: /AddUser.xhtml @9,9 <h:head> Tag Library supports namespace: http://java.sun.com/jsf/html, but no tag was defined for name: head
...
14:05:49,499 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/helloworldjsf].[Faces Servlet]] "Servlet.service()" pour la servlet Faces Servlet a généré une exception: com.sun.facelets.tag.TagException: /AddUser.xhtml @9,9 <h:head> Tag Library supports namespace: http://java.sun.com/jsf/html, but no tag was defined for name: head
...

But when I remove the line in the faces_config.xml: and I redeploy my projects, they are deployed well and my jsf page opens. When I validate the form so that it records in the database, it returns me the same page and in the console, there is the following error:

但是当我删除 faces_config.xml: 中的行并重新部署我的项目时,它们部署良好并且我的 jsf 页面打开。当我验证表单以使其记录在数据库中时,它返回相同的页面,并且在控制台中,出现以下错误:

"  INFO  [STDOUT] UserBeanCtrl.addUser(): Erreur d'initialisation du contexte JNDI<javax.naming.NamingException: Could not dereference
object [Root exception is java.lang.RuntimeException: Can not find
interface declared by Proxy in our CL +
org.jboss.web.tomcat.service.WebCtxLoader$ENCLoader@526f437d]> "

I do not understand what is happening.

我不明白发生了什么。

faces-config.xml

人脸配置文件

    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
 <managed-bean>
  <managed-bean-name>userBeanVue</managed-bean-name>
  <managed-bean-class>net.viralpatel.jsf.helloworld.UserBeanVue</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 <managed-bean>
  <managed-bean-name>userBeanCtrl</managed-bean-name>
  <managed-bean-class>net.viralpatel.jsf.helloworld.UserBeanCtrl</managed-bean-class>
  <managed-bean-scope>session</managed-bean-scope>
 </managed-bean>
 <navigation-rule>
  <display-name>AddUser</display-name>
  <from-view-id>/AddUser.xhtml</from-view-id>
  <navigation-case>
   <from-outcome>success</from-outcome>
   <to-view-id>/ListUser.xhtml</to-view-id>
  </navigation-case>
 </navigation-rule>
 <application>
  <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
 </application>
</faces-config>

web.xml

网页.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>helloworldjsf</display-name>
  <context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>bluesky</param-value>
  </context-param>
  <context-param>
    <param-name>facelets.REFRESH_PERIOD</param-name>
    <param-value>2</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xhtml</param-value>
  </context-param>
  <context-param>
    <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <listener>
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>

回答by BalusC

It look like that you're mixing JSF 1.x, Facelets 1.x and JSF 2.x. You've there a JSF 2.0 compatible faces-config.xmlroot declaration, but you're still declaring managed beans and navigation cases the legacy JSF 1.x way (those entries are not needed anymore in JSF 2.x thanks to the @MangedBeanannotation and implicit navigation feature). Perhaps you were reading wrong books/tutorials/resources while attempting to learn JSF 2.x.

看起来您正在混合 JSF 1.x、Facelets 1.x 和 JSF 2.x。您有一个兼容 JSF 2.0 的faces-config.xml根声明,但您仍在以旧的 JSF 1.x 方式声明托管 bean 和导航案例(由于@MangedBean注释和隐式导航功能,JSF 2.x 中不再需要这些条目) . 也许您在尝试学习 JSF 2.x 时阅读了错误的书籍/教程/资源。

Also, the ViewHandlerimplementation which you mentioned there is from Facelets 1.x which is only necessary when you're still using the legacy JSF 1.x. However, since JSF 2.x, Facelets 2.x is bundled in the JSF API/implementation JARs and has become the default view technology, thus there is no need to have a separate Facelets JAR file nor to manually register its view handler in faces-config.xml.

此外,ViewHandler您提到的实现来自 Facelets 1.x,只有在您仍在使用旧版 JSF 1.x 时才需要。但是,从 JSF 2.x 开始,Facelets 2.x 捆绑在 JSF API/实现 JAR 中并成为默认视图技术,因此无需单独的 Facelets JAR 文件,也无需在faces-config.xml.

The tag error on <h:head>also confirms that you're actually using JSF 1.x JARs during runtime instead of JSF 2.x as the <h:head>was introduced in JSF 2.x and absent in JSF 1.x.

上的标记错误<h:head>还确认您实际上在运行时使用的是 JSF 1.x JAR,而不是 JSF 2.x,因为 JSF 2.x<h:head>中引入了 JSF 1.x 中不存在的 JSF 2.x。

Get rid of all JSF 1.x and Facelets 1.x related JARs and make sure that you've downloaded and installed the JSF 2.x ones (or just don't download any as JBoss 6x by itself already ships with JSF 2.x bundled, so effectively having a completely empty /WEB-INF/libshould also be sufficient in order to get JSF 2.x to run). Throw away those JSF 1.x books/tutorials/resources and head to JSF 2.x ones. Our JSF wiki pageis a good starting point.

摆脱所有与 JSF 1.x 和 Facelets 1.x 相关的 JAR,并确保您已经下载并安装了 JSF 2.x 的 JAR(或者只是不要下载任何,因为 JBoss 6x 本身已经随 JSF 2.x 提供)。 x 捆绑,因此有效地完全空/WEB-INF/lib也应该足以让 JSF 2.x 运行)。扔掉那些 JSF 1.x 书籍/教程/资源,转向 JSF 2.x。我们的 JSF wiki 页面是一个很好的起点。

As to the XML configuration files, ultimately, you should end up with an emptyfaces-config.xmland onlythe following entry in web.xml:

至于 XML 配置文件,最终,您应该在 中得到一个空的faces-config.xml并且只有以下条目web.xml

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Add if necessary the PrimeFaces theme back, if the default of "aristo" isn't what you want.

如果“aristo”的默认值不是您想要的,则在必要时添加 PrimeFaces 主题。