JSF通过commandButton重定向

时间:2013-08-05 19:44:32

标签: jsf

如果代码是这样的话,我无法重定向到另一个页面:

<h:commandButton type="button" value="Enter" action="index?faces-redirect=true" >

但如果代码为:

,则重定向有效
<h:commandButton type="button" value="Enter" action="index?faces-redirect=true" >
    <f:ajax />
</h:commandButton>

有人可以解释一下吗?谢谢!

----------------------- EDIT ----------------------- -

整个xhtml代码供您参考:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
<h:head>

</h:head>

<h:body>
<h:form id="form">
    <h:commandButton id="enterModelButton" type="button" value="Enter" action="index?faces-redirect=true" >
        <f:ajax />
    </h:commandButton>
</h:form>
</h:body>
</html>

1 个答案:

答案 0 :(得分:42)

<h:commandButton type="button">不会生成提交按钮。它只是生成一个没有任何效果的“死”按钮,纯粹用于自定义onclick="..."脚本等。这有点像黑暗的JSF 1.0 / 1.1时代的遗留问题,因为在JSF中使用普通的vanilla HTML这种事情是不可能的。

<f:ajax>通过JSF生成的onclick执行ajax权限提交。它不关心按钮的type

基本上,删除type="button"并依赖其默认type="submit"可以解决您的问题。

<h:commandButton value="Enter" action="index?faces-redirect=true" />

然而,总而言之,如果这是真正的代码并且您实际上并不打算调用bean操作,那么您将完全朝着实现导航到不同页面的功能要求的方向走错按一下按钮。您应该使用<h:button>代替。

<h:button value="Enter" outcome="index" />

另见: