1

次のコードは期待どおりに機能していません。検証が期待どおりに機能しません。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <title>My Registration Page</title>
    <link href="stylesheet/reset.css" rel="stylesheet" type="text/css" />
    <link href="stylesheet/style.css" rel="stylesheet" type="text/css" />
    <link rel="icon" type="image/png" href="images/icons/favicon.png" />
    <script src="script/script.js" />
</h:head>
<h:body>
    <h:outputText id="progress_bar" styleClass="progress-bar" /> 
    <a4j:jsFunction name="login" action="#{loginBean.validateUser}" />


    <div id="login-container">
        <div class="login-logo">
            <img src="images/logo.png" />
        </div>
        <f:view>
            <div id="loin-form">
                <h1>
                    Log in to your account or <a href="#">sign up</a> to Get Started
                </h1>
                <h:form>
                    <h:inputText id="userName" value="#{loginBean.userName}"
                        label="User Name" required="true" class="txtFld">
                        <f:validator
                            validatorId="com.coinfling.validation.LoginBeanValidator" />
                    </h:inputText>
                    <h:message for="userName" style="color:red"></h:message>
                    <h:inputSecret id="passWord" value="#{loginBean.passWord}"
                        label="Password" required="true" class="pswrdFld">
                        <f:validator
                            validatorId="com.coinfling.validation.LoginBeanValidator" />
                    </h:inputSecret>
                    <h:message for="passWord" style="color:red"></h:message>
                    <p>
                        <a4j:commandLink id="forgotPasswordLink" lable="Password"
                            value="Forgot Your Password? " />
                        <a4j:commandButton id="loginButton" value="Sign In"
                            onclick="login();" styleClass="sign-btn" />
                    </p>
                </h:form>
            </div>


        </f:view>
    </div>

</h:body>
</html>

私の簡単な検証クラスコードは、パッケージcom.coinfling.validationの下にあります。

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
@FacesValidator("com.coinfling.validation.LoginBeanValidator")
public class LoginBeanValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent toValidate,
            Object value) throws ValidatorException {
        FacesMessage message = new FacesMessage("*UserName is not in Correct Format");
        throw new ValidatorException(message);

//      
//      if(toValidate.getId().equals("userName"))
//      {
//          FacesMessage message = new FacesMessage("*UserName is not in Correct Format");
//          throw new ValidatorException(message);
//      }
//      else if(toValidate.getId().equals("passWord"))
//      {
//          FacesMessage message = new FacesMessage("*Password is not in Correct Format");
//          throw new ValidatorException(message);
//      }
    }

}

あなたが私の検証を見ることができるように、私は入力を得るものすべてに対して例外をスローされます。必須フィールドも機能していません。エラーメッセージは出力されません。私は何が間違っているのですか?

敬具

4

1 に答える 1

2

実際にフォームを送信しているわけではありません。基本的に、スタンドアロンBeanメソッドを個別に呼び出しています。それは大きな違いです。フォームで検証を実行するには、フォームを送信する必要があります。

a4j:jsFunction間違ったアプローチを置き換えます:

<a4j:jsFunction name="login" action="#{loginBean.validateUser}" />
...
<a4j:commandButton id="loginButton" value="Sign In"
   onclick="login();" styleClass="sign-btn" />

通常のフォーム送信アプローチによる:

<a4j:commandButton id="loginButton" value="Sign In"
   action="#{loginBean.validateUser}" styleClass="sign-btn" />

なぜ使用したのかはわかりませんa4j:jsFunctionが、の恩恵を受けると思ったものはa4j:jsFunction、間違いなく別の方法で解決する必要があります。

render="@form"すべてのメッセージが表示されるように、ajaxリクエストの完了時にフォームを更新するためにを追加することを忘れないでください。

<a4j:commandButton id="loginButton" value="Sign In"
   action="#{loginBean.validateUser}" render="@form" styleClass="sign-btn" />
于 2012-10-21T13:22:18.457 に答える