在ManagedProperty中使用ResourceBundle的属性

4
我正在构建一个JSF验证器,其中有属性需要从ResourceBundle中加载。然而,我不太确定如何使用它,因为它并没有正确加载。你有什么想法可以让这个工作起来吗?
我尝试使用@PostConstruct来进行操作,但是在Eclipse中出现了以下错误:
“Access restriction: The type PostContruct is not accessible due to restriction on required library /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar”
所以,我不太确定最好的解决方法是什么。下面是我所说的示例... 该验证器...
@FacesValidator("usernameValidator")
public class UserNameValidator implements Validator {

  @ManagedProperty(value="#{props_userNamePattern}")
  private String userNamePattern;  

  @ManagedProperty(value="#{props_minUserNameLength}")
  private int minUserNameLength;  

  @ManagedProperty(value="#{props_maxUserNameLength}")
  private int maxUserNameLength;

  public void validate(FacesContext context, UIComponent component, Object
        value) throws ValidatorException {
    //My validations here...   
  }

  //Setters for the class properties

}

faces-config.xml

<resource-bundle>
    <base-name>settings</base-name>
</resource-bundle>

settings.properties

props_userNamePattern = /^[a-z0-9_-]+$/
props_minUserNameLength = 3
props_maxUserNameLength = 30
3个回答

6
@ManagedProperty仅适用于@ManagedBean类。而@PostConstruct也不是解决您功能需求的正确方法。
它应该放在一个方法上,当类已经构造完成并且所有依赖注入都完成时执行。您遇到的错误是由较旧的Eclipse + JRE版本特定组合导致的。如果无法升级,可以通过窗口 > 首选项 > Java > 编译器 > 错误/警告 > 弃用和受限API > 禁止引用 > 忽略来禁用警告/错误。
对于您的功能需求,很遗憾,我没有想到任何可以实现的注释。但是您可以通过编程方式实现它。
String bundlename = "settings";
Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
ResourceBundle bundle = ResourceBundle.getBundle(bundlename, locale);
String usernamePattern = bundle.getString("props_userNamePattern");
// ...

您可以在验证器的构造函数中完成此操作。如果正确使用,每个视图都将创建一个新实例。


0

补充BalusC正确答案; 在JSF 2.0/2.1中,验证器(Validators),转换器(Converters),阶段监听器(PhaseListeners)等都是“二等公民(second-class citizen)”,因为它们不能被注入(injection target)。

这也意味着您无法注入实体管理器(entity manager)或EJB,有时可以用于验证目的。

在JSF 2.2中,这应该会发生改变:

所有JSF生命周期构件都应该 支持CDI-aware和支持 注入/JSR-299/JSR-330 (PhaseListeners, NavHandlers, Components, ActionListeners, 等等)

请参见:http://jcp.org/en/jsr/detail?id=344


好的,知道了!谢谢提供这些信息。一旦这个功能可用,将会非常不错。 - mikesir87


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接