2012-06-28 17 views
7

Estoy intentando hacer una redirección de index.xhtml a registerFirstTime.xhtml.¿Cómo invocar un botón de comando sin validar todas las entradas requeridas?

El código en la página index.xhtml es:

<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> 

Mientras, el contenido de la redirección, en faces-config.xml, es:

<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> 

Hasta el nombre de entrada y la contraseña está llena, no puede hacer la redirección. ¿Cómo puedo hacer la redirección del registro sin tener en cuenta los campos obligatorios? ¡Gracias! =)

+0

¿Quisiste decir redirigir al enviar sin completar los valores? – NaaN

+0

Sí, necesito hacer una redirección de valores de llenado (inicio de sesión), pero también necesito otra redirección (registro) sin valores de llenado. –

+0

Probé poner h: commandButton en otra h: form, y funciona, pero ¿hay alguna posibilidad de poner el h: commandButton en la forma h: con el contenido id? –

Respuesta

26

Agregue immediate="true" al botón de comando que debe omitir el procesamiento de todos los campos de entrada que no tienen el atributo immediate="true".

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

Sin relación al problema concreto, tenga en cuenta que usted está técnicamente no enviar una redirección aquí. Esto básicamente envía un reenvío, es decir, la URL en la barra de direcciones del navegador permanece como la URL de la página de inicio de sesión. Debe agregar <redirect/> al <navigation-case>. También tenga en cuenta que los casos de navegación son un remanente de JSF 1.x. Desde JSF 2.x puede realizar una "navegación implícita", por lo que solo debe especificar la ID de la vista como resultado.

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

De esta manera puede deshacerse de la caja de navegación por completo.

6

solución @BalusC debe hacer el truco, como siempre. Pero me gustaría señalar un par de cosas ya que parece que estás usando Primefaces. Ambos no están relacionados con la pregunta pero podrían ayudarte en algún momento.

En primer lugar, podría utilizar la navegación implícita (introducida en JSF2). De esta forma, no necesitaría definir todas las reglas de navegación en su archivo faces-config.xml (trabajo en un antiguo proyecto JSF 1.2 y odio la necesidad de definir los roles de navegación para todo). Aquí te mostramos cómo hacerlo:

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

El parámetro caras redireccionamiento obliga a una redirección en lugar de un delantero, en caso de que necesite eso.

Además, supongamos que desea procesar correctamente algunos valores, pero no todos. En ese caso, puede usar el proceso, atributo de p: commandButton o p: ajax. Por ejemplo

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

Esto haría que el proceso de JSF sólo el botón (@este) y el componente con id = "nombre" (el campo de correo electrónico). De nuevo, probablemente no se aplica a esta pregunta, pero es algo que uso a menudo.

Cuestiones relacionadas