2012-06-28 9 views
7

Sto provando a fare un reindirizzamento da index.xhtml a registerFirstTime.xhtml.Come richiamare un pulsante di comando senza convalidare tutti gli input richiesti?

Il codice nella pagina 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> 

Mentre, il contenuto del reindirizzamento, in 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> 

Fino a quando il nome di ingresso e di la password è piena, non puoi eseguire il reindirizzamento. Come posso ottenere il reindirizzamento del record senza tenere conto dei campi obbligatori? Grazie! =)

+0

Intendevi reindirizzare su submit senza riempire valori ?? – NaaN

+0

Sì, ho bisogno di fare un reindirizzamento dei valori di riempimento (login), ma ho anche bisogno di altri reindirizzamenti (registrati) senza valori di riempimento. –

+0

Ho provato a mettere h: commandButton in un'altra h: form, e funziona, ma c'è qualche possibilità di mettere h: commandButton nella h: form con id content? –

risposta

26

Aggiungere immediate="true" al pulsante di comando che dovrebbe saltare l'elaborazione di tutti i campi di input che non hanno l'attributo immediate="true".

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

Estranei al problema concreto, si prega di notare che si sta tecnicamente non l'invio di un reindirizzamento qui. Questo in sostanza invia un forward, cioè l'URL nella barra degli indirizzi del browser rimane l'URL della pagina di login. È necessario aggiungere <redirect/> allo <navigation-case>. Si noti inoltre che i casi di navigazione sono un avanzo di JSF 1.x. Dal momento che JSF 2.x è possibile eseguire "navigazione implicita" per cui basta specificare l'ID della vista come risultato.

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

In questo modo è possibile eliminare del tutto il caso di navigazione.

6

@BalusC soluzione dovrebbe fare il trucco, come sempre. Ma vorrei sottolineare un paio di cose dal momento che sembra che tu stia usando Primefaces. Entrambi non sono correlati alla domanda, ma potrebbero essere d'aiuto ad un certo punto.

Innanzitutto, è possibile utilizzare la navigazione implicita (introdotta in JSF2). In questo modo non avresti bisogno di definire tutte le regole di navigazione nel tuo file faces-config.xml (lavoro su un vecchio progetto JSF 1.2 e odio la necessità di definire i ruoli di navigazione per tutto). Ecco come lo faresti:

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

Il parametro volti-redirect costringe un redirect al posto di un attaccante, in caso di bisogno che.

Inoltre, si supponga di voler elaborare correttamente alcuni valori, ma non tutti. In tal caso, è possibile utilizzare l'attributo processo di p: commandButton o p: ajax. Per esempio

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

Ciò renderebbe processo JSF solo il pulsante (@This) e il componente con id = "nome" (il vostro campo e-mail). Anche in questo caso, probabilmente non si applica a questa domanda, ma è qualcosa che uso spesso.