以下代碼有效,我需要知道的是,是否有方法使用註釋(例如@EJB,@Inject,@注入EJB(或ManagedBean)資源)Bean驗證:針對數據庫的自定義驗證
public class UniqueUsernameConstraintValidator implements ConstraintValidator<UniqueUsername, String> {
//TODO research on how to inject an EJB/BusinessObject (@EJB does not work)
private JournalBean bean;
@Override
public void initialize(UniqueUsername annotation) {
//This is a fall back there must be a better way
try {
javax.naming.Context context = new InitialContext();
bean = (JournalBean)context.lookup("java:global/Journal2/JournalBean");
} catch (NamingException e) {
logger.info("NamingException: " + e.getMessage());
}
}
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
if (null == bean.getUserByUsername(value)) {
return true;
}
return false;
}
}
下面的代碼不能正常工作(可變邏輯永遠不會初始化 - 空),我必須在WEB-INF目錄下一個空的beans.xml文件。 當我使用@Inject在一個ManagedBean,Servlet或者EJB,直接,然後它工作
public class UniqueUsernameConstraintValidator implements ConstraintValidator<UniqueUsername, String> {
@Inject
private Journal logic;
@Override
public void initialize(UniqueUsername annotation) {
logger.info("initialize("+annotation+")");
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
logger.warning("TODO: IMPLEMENT VALIDATION");
try {
if (null != logic.getUserByUsername(value)) { //Null
return true;
}
} catch (EntityAccessorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
}
有沒有一種方法,使這項工作?