gpt4 book ai didi

jsf-2 - 注入(inject)自定义验证器

转载 作者:行者123 更新时间:2023-12-04 14:02:57 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
Dependency injection in FacesValidator (JSF Validation)



也许,我缺少一些基本的东西——但我不能在自定义验证器类中使用注入(inject)来使用消息资源吗?以下代码在 msg 上给了我一个空值,所以注入(inject)显然不起作用,但为什么呢?如果不可能,我如何访问消息资源?到目前为止,我发现的所有示例都在验证器消息中使用硬编码文本,这对于本地化不是很有用。
public class BirthdateValidator implements Validator {
@Inject
private transient ResourceBundle msg;

@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if ( [some validation fails] ) {
FacesMessage message = new FacesMessage(msg.getString("validator.birthday"));
message.setSeverity(FacesMessage.SEVERITY_ERROR);
}
}
}

最佳答案

至于为什么它不能那样工作,请看这个答案:How to inject in @FacesValidator with @EJB, @PersistenceContext, @Inject, @Autowired .简而言之,注释它@Named而不是 @FacesValidator并在 <h:inputXxx validator> 中引用它或 <f:validator binding>#{birthdateValidator}反而。这个问题是由 JSF/CDI 人员的疏忽引起的。这在即将发布的 JSF 2.2 中得到修复。

Ok since I only need to access the message bundle, how would I access it without injection?



使用 Application#evaluateExpressionGet() 以编程方式对其进行评估:
ResourceBundle msg = context.getApplication().evaluateExpressionGet(context, "#{msg}", ResourceBundle.class);
// ...

你甚至可以选择一个特定的键:
String msg = context.getApplication().evaluateExpressionGet(context, "#{msg.key}", String.class);
// ...

也可以看看:
  • Read resource bundle properties in a managed bean
  • 关于jsf-2 - 注入(inject)自定义验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14437412/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com