2012-06-28 4 views
7

私は、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> 

一方、リダイレクションの内容、顔-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> 

入力名までパスワードが入力されていれば、リダイレクトはできません。 必要なフィールドを考慮せずにレコードのリダイレクトをどのように取得できますか?ありがとう! =)

+0

値を入力せずに送信時にリダイレクトすることを意味しましたか? – NaaN

+0

はい、リダイレクトの値を1つ作成(ログイン)する必要がありますが、他のリダイレクト(登録)の値を入力する必要もあります。 –

+0

私はh:commandButtonを別のh:フォームに置くことを証明しました。それは動作しますが、h:commandButtonをidコンテンツのh:フォームに配置する可能性はありますか? –

答えて

26

immediate="true"属性を持たないすべての入力フィールドの処理をスキップするコマンドボタンにimmediate="true"を追加します。具体的な問題へ

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

無関係、あなたが技術的にここにリダイレクトを送信していないことに注意してください。これは基本的にフォワードを送信します。つまり、ブラウザのアドレスバーのURLはログインページのURLのままです。 <navigation-case><redirect/>を追加する必要があります。また、ナビゲーションケースはJSF 1.xの残りの部分です。 JSF 2.x以降、ビューIDを結果として指定する「暗黙のナビゲーション」を実行できます。

このようにして、ナビゲーションケースを完全に取り除くことができます。

6

@BalusCソリューションは、いつものようにこのトリックを行うべきです。しかし、あなたがPrimefaceを使用しているように見えるので、私はいくつかのことを指摘したいと思います。どちらも質問には関係ありませんが、ある時点であなたを助けるかもしれません。

まず、暗黙ナビゲーション(JSF2で導入されました)を使用できます。そうすれば、faces-config.xmlファイル内にすべてのナビゲーションルールを定義する必要はありません(古いJSF 1.2プロジェクトを使用し、すべてのナビゲーションロールを定義する必要性が嫌い)。ここではあなたがそれを行うだろう方法は次のとおりです。

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

顔リダイレクトパラメータは、あなたがそれを必要とする場合には、代わりに前方のリダイレクトを強制します。

また、一部の値は正しく処理したいが、すべてを処理しないとします。その場合、プロセスの属性をp:commandButtonまたはp:ajaxにすることができます。例

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

のためにこれはJSFプロセスのみボタン(@this)とid =「名前」(電子メールフィールド)を持つコンポーネントになるだろう。繰り返しますが、この質問にはあてはまりませんが、よく使うものです。

関連する問題