2012-02-27 26 views
0

私はJSFで勉強していません。弱いですから、これはとても新しいものです。私はすでに一つの "問題"を見つけました...まあ、それは実際に大きな問題ではなく、より美容的な問題です。JSFでのフォーム入力のネイティブJavaScriptバリデーション

いくつかの検証タグをユーザーに登録するための基本フォームを作成しました(上記のコードを参照)。すべて正常に動作しますが、JavaScriptを使用してクライアント側のコントロールも使用したいと考えています。私は自分でJavaScriptチェック機能を書くことができることをすでに知っていますが、それは私が望むものではありません。バリデーションタグにバリデーションルールを定義しているので、JSFのような素敵なフレームワークが自動的にこれらの処理を自動で行うことができれば、コードを手作業で書くのは馬鹿だと思うのです。私は、SunがJavaScriptの自動検証をJSFから意図的に削除したことも知っています。

私の質問は次のとおりです。フォーム提出時にJSFが自動的にJavaScript関数(f:validate info)を生成する方法はありますか?また、PrimeFacesを使用していますが、PrimeFacesを使用してこれを実現することは可能ですか?ここで

は私が作ったフォームのコードです:

<h:form> 
    <table> 
     <tr> 
      <th><label for="registration-email">#{usersTexts.email}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.email}" id="registration-email" validatorMessage="#{msg.invalidEmail}" maxlength="100"> 
        <f:validateRegex pattern="^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$" /> 
       </h:inputText> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-name">#{usersTexts.name}:</label></th> 
      <td> 
       <h:inputText value="#{userRegistry.newUser.name}" id="registration-name" validatorMessage="#{formsTexts.field} #{usersTexts.name} #{msg.isEmpty}" maxlength="100"> 
        <f:validateRequired /> 
       </h:inputText> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-password1">#{usersTexts.password}:</label></th> 
      <td> 
       <h:inputSecret value="#{userRegistry.newUser.password}" binding="#{password}" id="registration-password1" validatorMessage="#{formsTexts.field} #{usersTexts.password} #{msg.isEmpty}"> 
        <f:validateRequired /> 
       </h:inputSecret> 
      </td> 
     </tr> 
     <tr> 
      <th><label for="registration-password2">#{usersTexts.passwordAgain}:</label></th> 
      <td> 
       <h:inputSecret id="registration-password2" validatorMessage="#{msg.passwordsNotEqual}"> 
        <f:validateLength minimum="#{user.MIN_PASSWORD_LENGTH}" /> 
        <f:validator validatorId="equality" /> 
        <f:attribute name="matchAgainst" value="#{password}" /> 
       </h:inputSecret> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2"> 
       <p:captcha immediate="true" validatorMessage="#{msg.wrongCaptcha}" requiredMessage="#{formsTexts.captcha} #{msg.isEmpty}" /> 
      </td> 
     </tr> 
     <tr> 
      <td colspan="2" class="submit_row"><h:commandButton value="#{usersTexts.register}" action="#{userRegistry.register}" /></td> 
     </tr> 
    </table> 
</h:form> 

答えて

0

JSFの仕様は、任意のネイティブJavaScript検証を定義したり、提供していません。

あなたが望むすべてが即座にフィードバックされた場合は、単に問題の入力フィールドの内部

<f:ajax event="blur" render="messages" /> 

を入れて、コマンドボタンの内側

<f:ajax execute="@form" render="@form" /> 

+0

実際には動作しません...送信時に私はこのエラーを受け取ります:malformedXML:コンポーネントが失敗したコード:0x80004005(NS_ERROR_FAILURE)を返し、ぼかしで何も起こりません。 – James

+0

テンプレートに「」の代わりに「」を使用していますか? ''は、JSF(およびコンポーネントライブラリ)が必要なCSS/JSファイルを自動インクルードすることを可能にします。 – BalusC

+0

はい、あります。実際にはテンプレートの中だけではなく、具体的なページにありましたが、それは問題ではありません。... も追加しようとしましたが、問題は残ります。 – James

関連する問題