代码之家  ›  专栏  ›  技术社区  ›  Mateusz Dymczyk

使用action属性时,文件扩展名更改为“.jsf”

  •  1
  • Mateusz Dymczyk  · 技术社区  · 14 年前

    每当我使用动作属性(即 <h:commandButton action="/test/test2.whatever" value="Test"/> )JSF将扩展名改为.jsf,然后将我重定向到那里。因此,如果我按下上述按钮,它会将我重定向到/test/test2.jsf。这是默认行为吗?我可以更改它吗?例如,只有带有.xhtml的文件才会更改为.jsf(老实说,这是我的第一个JSF项目,配置是由休假的队友完成的)。

    3 回复  |  直到 14 年前
        1
  •  2
  •   pakore    14 年前

    action 应返回将由 NavigationHandler 决定要呈现的下一页。这些导航规则在 faces-config.xml 文件,通常位于 /WEB-INF .

    此外,还有一个 context-param 在文件中 web.xml 定义JSF文件的默认扩展名。即。

     <context-param>
      <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
      <param-value>.xhtml</param-value>
     </context-param>
    

    所以你的可能被定义为 .jsf 这就是为什么JSF改变了 .whatever JSF

    我的建议是你不应该在 行动 参数。相反,您应该通过 faces-config.xml文件 文件。即:

     <navigation-rule>
      <display-name>login</display-name>
      <from-view-id>/pages/login.xhtml</from-view-id>
      <navigation-case>
       <from-outcome>userLoaded</from-outcome>
       <to-view-id>/pages/user.xhtml</to-view-id>
       <redirect/>
      </navigation-case>
      <navigation-case>
       <from-outcome>userLoadedFail</from-outcome>
       <to-view-id>/pages/login.xhtml</to-view-id>
       <redirect/>
      </navigation-case>
     </navigation-rule>
    
        2
  •  1
  •   egbokul    14 年前

    要考虑的另一件事(pakore答案中的默认后缀除外)是web.xml中的servlet映射:

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.jsf</url-pattern>
    </servlet-mapping>
    

    所以要小心,如果jsf servlet是由.jsf扩展映射的,那么您不想更改它…否则,它如何知道该页是JSF页?

        3
  •  1
  •   BalusC    14 年前

    这个 h:commandButton 呈现“发布”按钮。确实不建议使用逐页发布导航。宁可使用 h:button ,它呈现一个get按钮。您只需在 outcome (基本上是不带扩展名的文件名部分)。

    <h:button outcome="test2" />
    

    它将隐式地转到 test2.xhtml . 不需要导航箱。

    但是,如果目标页面不是JSF页面,那么这里不需要JSF按钮。简单的普通HTML就足够了。

    <form action="page.html"><input type="submit" /></form>