正如标题所暗示的那样,我试图将视图范围的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 - RangeSliderBean
在validate()
方法中不可用。
我暂时按照以下方式在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
替换)。
答案 0 :(得分:0)
通过使用Application这样评估表达式来尝试动态注入。
FacesContext facesContext = FacesContext.getCurrentInstance();
RangeSliderBean rangeSliderBean = facesContext.getApplication().evaluateExpressionGet(facesContext, "#{rangeSliderBean}", RangeSliderBean .class);