为什么我在JSF页面上有这个错误?

时间:2012-08-09 16:01:20

标签: java jsf java-ee maven richfaces

我是jsf的新手。我有一个maven项目,它在websphere 8上运行。 我使用jsf和richfaces。我收到了这个错误:

Error Parsing /viewMetadata/index.xhtml: Error Traced[line: 2] The element type "html" must be terminated by the matching end-tagend with '>'. 

faces-config.xml看起来像:(它是leer。我目前没有托管bean)

<?xml version="1.0" encoding="UTF-8"?>

<faces-config 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">


</faces-config>

web.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>My project</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>blueSky</param-value>
  </context-param>
  <context-param>
    <param-name>org.richfaces.enableControlSkinning</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
  </context-param>
  <listener>
    <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
  </listener>

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>    
  </servlet-mapping>  
</web-app>

最后我的第一个jsf页面..(index.xhtml)

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
<h:head>
    <title>RichFaces Greeter</title>
</h:head>
<h:body>
    <f:view>
        <h:form>
            <rich:panel header="RichFaces Greeter 5" style="width: 315px">
                <rich:inputNumberSlider minValue="1" maxValue="100"
                    showInput="false" />
                <rich:inputNumberSpinner minValue="1" maxValue="100" />
                <rich:calendar id="date" value="#{bean.dateTest}"
                    oncurrentdateselect="if (!confirm('Are you sure to change month(year)?')){return false;}"
                    oncurrentdateselected="alert('month(year) select:'+event.rich.date.toString());" />


            </rich:panel>

        </h:form>
    </f:view>
</h:body>
</html>

我的POM.xml看起来像:(可能缺少一些库?)

<dependencies>
        <dependency>
            <groupId>org.richfaces</groupId>
            <artifactId>richfaces-bom</artifactId>
            <type>pom</type>
            <version>4.2.2.Final</version>
        </dependency>   

        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-api</artifactId>
            <version>2.0.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.faces</groupId>
            <artifactId>jsf-impl</artifactId>
            <version>2.0.2</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>MyWeb</finalName>
    </build>
</project>

2 个答案:

答案 0 :(得分:2)

从您的POM.xml我判断您正在使用mojarra JSF实现。但是你的web.xml部分是指Apache MyFaces(Mojarra是JSF的参考实现,MyFaces是apache基础的竞争实现)。让我们坚持mojarra。所以失去了听众。 然后你缺少JSF servlet的声明,它负责处理JSF页面,因此必须添加。这是您的web.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>GEm project</display-name>
  <welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <context-param>
    <param-name>org.richfaces.skin</param-name>
    <param-value>blueSky</param-value>
  </context-param>
  <context-param>
    <param-name>org.richfaces.enableControlSkinning</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
  </context-param>

  <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>
</web-app>

答案 1 :(得分:0)

错误说它在index.xhtml中。你为什么要寻找其他地方?有时,如果你添加了一个不属于它的额外标签,它可能会破坏页面的解析。确保所有标签在正确/预期的位置正确关闭。也就是说,对于每个&lt; xyz&gt;标签有一个相应的&lt; / xyz&gt;标签或它是用&lt; xyz /&gt;创建的如果不需要结束标记(请注意'z'和'/'之间的空格)。这是XHTML而不是html。所有标签都需要正确关闭。它不像HTML那样宽容。并确保结束标签位于正确的位置。