3

验证器不支持 post 构造注释吗?

我有一个应用程序范围的 jndi servicelocator bean,我将它作为托管属性注入到我的验证器中。

@ManagedProperty(value = "#{jndiServiceLocatorBean}")
private final JndiServiceLocatorBean jndiServiceLocatorBean = null;

用于初始化我必要的远程 bean 的 post 构造注释方法永远不会被调用,因此我的远程 bean 保持为空。

private UserBeanRemote userBeanRemote = null;

@PostConstruct
public void postConstruct()
{
    this.userBeanRemote = (UserBeanRemote) this.jndiServiceLocatorBean.getRemoteBean(UserBeanRemote.class);
}
4

1 回答 1

3

它仅在Validator被注释为 a@ManagedBean@Named而不是时才有效@FacesValidator

只需使用普通的构造函数。

@FacesValidator("fooValidator")
public class FooValidator implements Validator {

    private UserBeanRemote userBeanRemote;

    public FooValidator() {
        FacesContext context = FacesContext.getCurrentInstance();
        JndiServiceLocatorBean jndiServiceLocatorBean = context.getApplication().evaluateExpressionGet(context, "#{jndiServiceLocatorBean}", JndiServiceLocatorBean.class);
        this.userBeanRemote = (UserBeanRemote) jndiServiceLocatorBean.getRemoteBean(UserBeanRemote.class);
    }

    // ...
}

支持 JSF 工件中的依赖注入,而不是@ManagedBeanJSF 2.2计划的(规范问题 763)。

也可以看看:

于 2012-05-28T19:34:52.677 回答