如何在JSF2.0中声明默认的.xhtml页面

时间:2012-11-18 18:14:56

标签: java eclipse jsf-2 tomcat7

我已经使用Eclipse Indigo和Tomcat 7.0.32创建了一个JSF 2.0应用程序,如Eclipse Documentation所示。

在这个应用程序中,我有两页:

  1. login.xhtml
  2. welcome.xhtml
  3. login.xhtml我导航到welcome.xhtml

    我已将login.xhtml声明为web.xml中的欢迎页面。

      <welcome-file-list>
        <welcome-file>login.xhtml</welcome-file>
      </welcome-file-list>
    

    并将url-pattern的{​​{1}}定义为:

    Faces Servlet

    现在我有两个问题:

    1. 当我访问网址 <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> 时,我可以看到登录页面,但在登录后,当我导航到welcome.xhtml时,网址将更改为http://localhost:8080/LibraryInformationSystem/而不是{{1 }};但如果我手动浏览http://localhost:8080/LibraryInformationSystem/login.xhtml,它也会显示相同的内容。我的问题是网址没有改变的原因?这是定义默认页面的正确方法吗?我从其他两个SO线程中找到了信息,第一个是here,第二个是here
    2. 第二个问题是,当我从Eclipse运行应用程序时,当它将应用程序启动到其内部浏览器时,我可以看到登录页面,但是如果我关闭从Eclipse运行的服务器并从批处理中运行Tomcat文件startup.bat驻留在bin文件夹中并将应用程序导出为war文件并将其部署到webapps文件夹中,有时我可以看到登录页面,有时我从Firefox或Chrome获得Tomcat的HTTP错误 - 404页面。如果我关闭startup.bat并从webapps文件夹中删除myapplication.war和myapplication文件夹,然后再次从startup.bat启动服务器并再次从Eclipse导出war我可以看到登录页面,在这种情况下没有404错误。为什么会这样?
    3. 任何指针对我都非常有用。

1 个答案:

答案 0 :(得分:1)

关于第1点),JSF打破了HTTP语义。它应该使用GET来提供http://localhost:8080/LibraryInformationSystem/welcome.xhtml的内容,但JSF使用POST,因此URL不会更改。您可以执行Post-Redirect-Get更新URL,但默认情况下不是JSF的工作方式。

关于第2点,你应该避免在同一个SO问题中提出两个问题。