是否可以将视图范围的bean注入JSF中的@FacesValidator?

时间:2014-05-28 23:53:23

标签: jsf validation jsf-2.2

正如标题所暗示的那样,我试图将视图范围的bean注入由@FacesValidator修饰的验证器中,如下所示。

@FacesValidator(value = "priceRangeValidator")
public final class PriceRangeValidator implements Validator {
    @ManagedProperty(value="#{rangeSliderBean}")
    private RangeSliderBean rangeSliderBean; //Setter only.

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        // The bean instance is unavailable here. It is null.
    }
}

目标视图范围bean - RangeSliderBeanvalidate()方法中不可用。


我暂时按照以下方式在validate()方法本身中获取该bean的实例。

RangeSliderBean rangeSliderBean = context.getApplication().evaluateExpressionGet(context, "#{rangeSliderBean}", RangeSliderBean.class);

是否可以使用@ManagedProperty注释或其他内容将视图范围的JSF托管bean注入验证器?

我正在使用JSF 2.2.6。


更新

这不适用于Mojarra 2.3.0-m01。 bean实例仍然像以前一样保持null。这篇文章很久之后,我采用了相应的视图范围CDI bean(@ManagedProperty@Inject替换)。

1 个答案:

答案 0 :(得分:0)

通过使用Application这样评估表达式来尝试动态注入。

FacesContext facesContext = FacesContext.getCurrentInstance();
RangeSliderBean rangeSliderBean = facesContext.getApplication().evaluateExpressionGet(facesContext, "#{rangeSliderBean}", RangeSliderBean .class);