0

私はカスタム検証でこの方法を使用しています。この方法が正しいかどうか、私がこのフォームを持っていると仮定した場合、少し混乱しています:

<h:form id="myForm>
 <h:outputText value="user name" />
 <h:inputText value="#userBean.userName" id="userName" />

 <h:outputText value="Password" />
 <h:inputText value="#userBean.Password" id="passwd" />
</h:form>

そして私はそのマネージドBeanを持っています:

@ManagedBean(name="userBean")
@SessionScoped
public class UserBeanData{
   private String userName;
   private String password;
   // with setters and getters........
   //
}

マネージド Bean フィールドと次のような実装を検証するためのカスタム バリデーター:

@Override
public validate(FacesContext context, UIComponent component, Object value) throws ValidatorException{
Map<String, String> params = context.getExternalContext().getRequestParametersMap();

String username = params.get("myForm:username");
String pass = params.get("myForm:passwd");

// validate : if fields are not null check if the user exists if the result is empty , throws a validation Message Error
}

私の質問は次のとおりです。このようなマネージド Bean の値を取得することは正しいかどうか????

4

2 に答える 2

0

validateメソッドの会社に注意してください。UIComponentメソッドによって検証されるコンポーネントであるパラメーターがあります。これUIComponentには、現在の値 ( getValue()) とユーザーが送信した値 ( ) の両方が含まれますgetSubmittedValue()

検証している特定のタイプのコンポーネントにキャストするUIComponent必要がある場合があります(この場合、それは ですUIInput)。

ログイン前にユーザー名とパスワードの両方を検証する場合は、いくつかの方法があります。あなたの場合、追加されたパラメーターとしてパスワードフィールドを使用してユーザー名フィールドを検証するだけで十分です。これを行うことでそれを達成できます:

<h:outputText value="user name" />
<h:inputText value="#userBean.userName" id="userName" validator="#{yourBean.validateLogin}">
    <f:attribute name="pass" value="#{passwordField}" />
</h:inputText>

<h:outputText value="Password" />
<h:inputText value="#userBean.Password" id="passwd" binding="#{passwordField}"/>

bindingパスワードの は、 にネストされたタグ<h:inputText/>の の値に関連していることに注意してください。このセットアップでは、次のように検証を実行できます。pass<f:attribute/>username <h:inputText/>

public void validateLogin(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    //I suppose it's a typo, but your validate method lacks the return type.
    String username = (String) value;
    UIInput passwordInput = component.getAttributes().containsKey("pass") ? 
        (UIInput) component.getAttributes().get("pass") : null;
    if(passwordInput != null) {
        //Just to be sure the input was added as a parameter successfuly
        String submittedPassword = passwordInput.getSubmittedValue();
        //Now, do your validations based on the strings "username"
        //and "password".
    }
}

これはすべて検証フェーズで行われるため、マネージド Bean にはまだ値が設定されていません。そのため、送信された値を少しいじる必要があります。

于 2013-03-12T14:31:24.697 に答える