9

我正在尝试从 index.xhtml 重定向到 registerFirstTime.xhtml。

页面 index.xhtml 中的代码为:

<h:form id="content" style="margin-top: 1em;">
    <p:panel id="panel" header="LOGIN">
        <p:messages id="msgs" globalOnly="true"/>
        <h:panelGrid columns="3">
            <h:outputLabel value="e-mail" />
            <p:inputText id="name" required="true" value="#{UserBean.email}"
                requiredMessage="Required: e-mail" display="icon">
            </p:inputText>
            <p:message id="msgName" for="name"/>
            <h:outputLabel value="Password" />
            <p:password id="password" required="true" value="#{UserBean.password}"
                requiredMessage="Required: Password" display="icon" feedback="false">
            </p:password>
            <p:message id="msgPassword" for="password"/>
        </h:panelGrid>
        <h:panelGrid columns="2">
            <p:commandButton value="Login" actionListener="#{UserBean.validate}" update="msgNombre, msgPassword, msgs"/>
            <h:commandButton value="Register for the first time" action="register"/>
        </h:panelGrid>
    </p:panel>
</h:form>

而在 faces-config.xml 中重定向的内容是:

<navigation-rule>
    <from-view-id>index.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>register</from-outcome>
        <to-view-id>registerFirstTime.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

在填写输入名称和密码之前,您无法进行重定向。如何在不考虑必填字段的情况下重定向记录?谢谢!=)

4

2 回答 2

30

添加immediate="true"到命令按钮,该按钮应跳过对所有不具有该immediate="true"属性的输入字段的处理。

<h:commandButton value="Register for the first time" action="register" immediate="true" />

与具体问题无关,请注意,您在技术上并未在此处发送重定向。这基本上发送了一个转发,即浏览器地址栏中的 URL 仍然是登录页面的 URL。您需要添加<redirect/><navigation-case>. 另请注意,导航案例是 JSF 1.x 的遗留物。从 JSF 2.x 开始,您可以执行“隐式导航”,只需指定视图 ID 作为结果。

<h:commandButton value="Register for the first time" action="registerFirstTime?faces-redirect=true" immediate="true" />

这样您就可以完全摆脱导航箱。

于 2012-06-28T12:35:04.507 回答
7

@BalusC 解决方案应该一如既往地解决问题。但我想指出几件事,因为您似乎正在使用 Primefaces。两者都与问题无关,但可能会在某些时候帮助您。

首先,您可以使用隐式导航(在 JSF2 中引入)。这样您就不需要在 faces-config.xml 文件中定义所有导航规则(我在一个旧的 JSF 1.2 项目上工作,并且讨厌需要为所有内容定义导航角色)。以下是你的做法:

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true"/>

faces-redirect 参数强制重定向而不是转发,以防万一。

另外,假设您想正确处理一些值,但不是全部。在这种情况下,您可以使用p:commandButton 或 p:ajax的process属性。例如

<h:commandButton value="Register for the first time" action="registerFirstTime.xhtml?faces-redirect=true" process="@this, name"/>

这将使 JSF 只处理按钮 (@this) 和 id="name" 的组件(您的电子邮件字段)。同样,它可能不适用于这个问题,但它是我经常使用的东西。

于 2012-06-28T14:22:23.063 回答