从验证器设置bean属性

时间:2013-02-08 05:44:24

标签: jsf-2 validation

有没有办法从Validator设置bean属性?
就我而言,我有一个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属性? (不 使用静态属性)
  • 使用现有方法是否存在任何并发问题(一个用户可能会收到其他用户选择的引荐对象等)?

由于

1 个答案:

答案 0 :(得分:3)

托管bean中的静态成员在所有实例(以及应用程序的用户)之间共享。因此,在将成员变量静态化之前至少要考虑两次。

如果使验证器成为托管bean,则可以将目标托管bean注入验证器。有关详细信息,请参阅this answer

在给定的示例中,注入了EJB,但您可以通过@ManagedProperty注释注入JSF托管bean