也许,我遗漏了一些基本的东西 - 但是我不能在自定义验证器类中使用注入来使用消息资源?下面的代码给我一个null msg,所以注入显然不起作用,但为什么呢?如果不可能,我该如何访问消息资源?到目前为止我找到的所有示例都在验证器消息中使用硬编码文本,这对本地化不是很有用.
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 10
至于它为何不能以这种方式工作,请参阅以下答案:如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired注入@FacesValidator.简而言之,注释它@Named而不是@FacesValidator引用它<h:inputXxx validator>或<f:validator binding>作为#{birthdateValidator}替代引用它.问题是由JSF/CDI人员监督造成的.这在即将到来的JSF 2.2中得到修复.
好的,因为我只需要访问消息包,如何在不注入的情况下访问它?
使用Application#evaluateExpressionGet()以下方式以编程方式评估:
ResourceBundle msg = context.getApplication().evaluateExpressionGet(context, "#{msg}", ResourceBundle.class);
// ...
Run Code Online (Sandbox Code Playgroud)
您甚至可以选择一个特定的密钥:
String msg = context.getApplication().evaluateExpressionGet(context, "#{msg.key}", String.class);
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3017 次 |
| 最近记录: |