为什么在JSF的web.xml中以这种方式定义?

时间:2014-09-29 06:39:24

标签: cdi web.xml

在这个小项目中,只有一个类RichBean.java和一个JSF文件index.html,用于演示在JSF中使用CDI。我的问题是关于“

 <welcome-file>faces/index.xhtml</welcome-file>" 

在web.xml中定义。为什么它是“面孔/”?

没有提到“faces /”目录或配置。我认为“面孔”只是一个可以是任何东西的名字,但事实并非如此。我尝试将其更改为其他内容,即“faceg”,然后它不起作用。

RichBean.java

    @Named
    @SessionScoped
    public class RichBean implements Serializable {

    private String name;

    @PostConstruct
    public void postContruct() {
        name = "John";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    } 

的index.xhtml

....
<body>
<ui:composition template="/templates/template.xhtml">

    <ui:define name="title">Hello world JSF</ui:define>

    <ui:define name="body">
        <fieldset style="width:500px">
            <legend>Helloworld using JSF and RichFaces</legend>
            <p>
                This example demonstrates adding ajax processing and updating to a standard JSF component.
            </p>

            <rich:panel header="Ajax enabled inputText">
                <h:form id="helloWorldJsf">
                    <h:outputLabel value="Name:" for="nameInput"/>
                    <h:inputText id="nameInput" value="#{richBean.name}">
                        <a4j:ajax event="keyup" render="output"/>
                    </h:inputText>
                    <h:panelGroup id="output">
                        <h:outputText value="Hello #{richBean.name}!"
                                      rendered="#{not empty richBean.name}"/>
                    </h:panelGroup>
                </h:form>
            </rich:panel>
        </fieldset>
    </ui:define>
    </ui:composition>
    </body>
    </html>

的beans.xml

    <beans 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/beans_1_0.xsd">
    </beans>

web.xml中。

如何配置“faces /”?我不知道它是如何以及为什么它与项目中的任何其他内容相关联。

我正在学习这个演示。请帮助理解这一点。非常感谢。

    <web-app version="3.0" 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-    app_3_0.xsd">

    <!-- add a welcome-file-list entry to allow JSF pages to be used as welcome files -->
      <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
      </welcome-file-list>
    </web-app>

1 个答案:

答案 0 :(得分:0)

Servlet类FacesServlet启动JSF请求处理 生命周期,必须在web.xml中定义。 servlet映射 tag定义FacesServlet应该执行的URL。 模式 / faces / * 通常由JSF规范使用,但是 可以使用任何其他前缀或扩展程序。该示例使用as web-app属性version =“2.5”这意味着我们正在使用 servlet-api版本2.5。如果你使用tomcat 6我们需要最少 版本2.5中的servlet-api。与jsf 1.2相比没什么变化 这个例子。 您可以在下面看到web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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 web-app_2_5.xsd"
version="2.5">
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
<display-name>HelloWorld with JSF RI 2 (Beta 2)</display-name>
<servlet>
<display-name>FacesServlet</display-name>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>

您可以根据自己的要求将/ faces / 更改为/ facesg / ,这对您有用。

我希望它会解决您的疑问!!