有没有办法从当前面上下文中获取ValidatorFactory?
用例:
UIComponent
答案 0 :(得分:0)
bean验证器通常由jsr-299的一些实现加载[CDI - (开放式网络bean等)...]如果它在CDI中可用,你通常可以使用面部EL-Resolver来拉它。
对于用例1和2:
因为它可以在CDI中使用,所以你可以简单地注入它。
public class MyService{
@Inject
private ValidatorFactory validatorFactory;
}
我可能会更进一步,使这个MyService成为单身人士,并在整个服务和网络层中使用它。
答案 1 :(得分:0)
可以使用以下方法检查BeanValidator ValidatorFactory的来源:
/**
* Retrieves the ValidatorFactory from the given context
*
* @param context FacesContext
*
* @return {@link ValidatorFactory}
*/
public static ValidatorFactory getValidatorFactory(final FacesContext context)
{
final Object cachedObject = context.getExternalContext().getApplicationMap()
.get(BeanValidator.VALIDATOR_FACTORY_KEY);
ValidatorFactory validatorFactory;
if (cachedObject instanceof ValidatorFactory)
validatorFactory = (ValidatorFactory) cachedObject;
else
try
{
validatorFactory = Validation.buildDefaultValidatorFactory();
context.getExternalContext().getApplicationMap()
.put(BeanValidator.VALIDATOR_FACTORY_KEY, validatorFactory);
}
catch (final ValidationException e)
{
throw new FacesException("Could not build a default Bean Validator factory", e);
}
return validatorFactory;
}