使用ManagedProperty中的ResourceBundle中的属性



我有一个正在构建的JSF验证器,其中有我想从ResourceBundle加载的属性。然而,我不太确定如何工作,因为它没有正确加载。有什么好主意吗?

我已经尝试使用@PostContruct来做到这一点,但我在Eclipse中得到以下错误:

访问限制:类型PostConstruct是不可访问的,由于所需图书馆限制/系统/图书馆/Java/JavaVirtualMachines/1.6.0.jdk/内容/类/classes.jar

所以,我不太确定什么是最好的工作方式。下面是我正在谈论的一个例子……

validator…

@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

@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");
// ...

可以在验证器的构造函数中这样做。如果使用得当,无论如何都会为每个视图创建一个新的实例。

加上BalusC的正确答案;在JSF 2.0/2.1中,验证器、转换器、phaselistener等都是"二等公民",因为它们不是注入目标。

这也意味着您不能注入实体管理器或EJB,它们有时可以用于验证目的。

在JSF 2.2中应该会改变:

所有JSF生命周期工件都应该是cdi意识和支持注射/jsr - 299/jsr - 330(NavHandlers PhaseListeners组件、actionlistener一切。)

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

也许接缝面可以帮助解决这种情况?

  • http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/artifacts.html
  • http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/faces.messages.html

相关内容

  • 没有找到相关文章

最新更新