1

から Bean プロパティを設定する方法はありValidatorますか?
私の場合、validatorデータベースに接続していくつかの検証を実行する があります。
検証が成功したら、データベースから受け取ったオブジェクトを Bean プロパティ内に保存したいと思います。
現在、バリデーターから Bean の静的プロパティを設定することでこれを行っています。
ここに私のバリデーターメソッドがあります

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    //perform validation
    if(isValidated) {
        Referral ref = database.getReferral(value.toString());  //receive referral object from batabase
        RegistrationBean.staticReferral = ref; // Set ref to RegistrationBean's static property
    } else {
       FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_FATAL, "Invalid Referral!", "Referral does not exist!");
        throw new ValidatorException(msg);
    }
}  

そしてここに私のRegistrationBean

@ManagedBean  
@ViewScoped  
public class RegistrationBean implements Serializable {

    //other bean properties
    private Referral referral;
    public static Referral staticReferral;

    public RegistrationBean() {
        //default constructor
    }

    public Referral getReferral() {
        this.staticReferral = referral;
        return referral;
    }
    // other getters, setters and methods
}

したがって、私の頭の中の質問は次のとおりです。

  • Bean プロパティを Bean から直接設定する方法はありますか? (静的プロパティを使用しない場合)
  • 既存のアプローチを使用すると、同時実行の問題 (あるユーザーが他のユーザーの選択した参照オブジェクトを受け取るなど) はありますか?

ありがとう

4

1 に答える 1

3

Static members in managed beans are shared among all instances (and users of your application). So think at least twice before making a member variable static.

If you make your validator a managed bean, you can inject your target managed bean into your validator. See this answer for details.

In the given example an EJB is injected, but you can inject a JSF managed bean via the @ManagedProperty annotation

于 2013-02-08T09:30:26.817 に答える