2011-04-11 75 views
4

我有一个JSF验证器,我正在构建它的属性,我想从ResourceBundle加载。但是,我不太清楚如何处理这个问题,因为它没有正确加载。关于如何使这项工作的任何想法?在ManagedProperty中使用来自ResourceBundle的属性

我使用@PostContruct做尝试,但我发现在Eclipse以下错误:

访问限制:该类型 PostConstruct不上所需的库 由于 限制访问/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 

回答

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

谢谢!我实现了你的解决方案,它完美的工作! – mikesir87 2011-04-11 18:47:59

+0

不客气。 – BalusC 2011-04-11 18:48:35

0

添加到BalusC的正确答案;在JSF 2.0/2.1验证器中,转换器,PhaseListeners等是一种“二等”公民,因为它们不是注入目标。

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

在JSF 2.2,这是应该改变:

所有JSF生命周期工件应 CDI感知和支持 注入/ JSR-299/JSR-330 (的PhaseListeners,NavHandlers, 组件, ActionListeners, 应有尽有。)

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

+0

很高兴知道!谢谢(你的)信息。有这个可用时会很好。 – mikesir87 2011-04-11 18:49:07

相关问题