Hallo ich habe ein sehr Ähnliches Problem wie Bytemute:
Das problem ist wirklich sehr ähnlich, nur dass ich den Validator in eine eigene Klasse geschrieben habe. Auch hier soll der Validator prüfen, ob ein User bereits in der DB vorhanden ist, und Ruft indirekt einen DB Zugriff auf. (Das der DB Zugriff als solches funktioniert weis ich, weil er auch an anderen Stellen aufgerufen wird.)
Dennoch bekomme ich folgende Fehlermeldung:
Der Aufruf vom Validator im xhtml:
Der Validator selbst:
Die Methode servSegur.existeUsuario in einer StatlessSessionBean:
Und die Methode usuario.buscarUsuario(login) aus einem DAO (der auch als StatlessSessionBean implementiert ist.):*
* Wie gesagt diese letzte Methode wird auch noch von woanders aufgerufen und funktioniert. Ich teste 2x ob ein user schon existiert. einmal in der UI ueber den Validator(funst nicht), und einmal in der Logik in der Methode, die einen neuen User erstellt und diesen in die DB einfügt(funst). (Ist ein wunsch von unserem Prof sowas doppelt zu testen, deshalb).
Das problem ist wirklich sehr ähnlich, nur dass ich den Validator in eine eigene Klasse geschrieben habe. Auch hier soll der Validator prüfen, ob ein User bereits in der DB vorhanden ist, und Ruft indirekt einen DB Zugriff auf. (Das der DB Zugriff als solches funktioniert weis ich, weil er auch an anderen Stellen aufgerufen wird.)
Dennoch bekomme ich folgende Fehlermeldung:
HTML:
java.lang.NullPointerException
at com.vista.util.UsuarioExisteValidator.validate(UsuarioExisteValidator.java:32)
at javax.faces.component.UIInput.validateValue(UIInput.java:1142)
at javax.faces.component.UIInput.validate(UIInput.java:960)
at javax.faces.component.UIInput.executeValidate(UIInput.java:1204)
at javax.faces.component.UIInput.processValidators(UIInput.java:693)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
at javax.faces.component.UIForm.processValidators(UIForm.java:240)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1159)
at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:72)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
at java.lang.Thread.run(Unknown Source)
Der Aufruf vom Validator im xhtml:
HTML:
<h:outputLabel for="login" value="Login: *" />
<p:inputText id="login"
value="#{loginBean.login}" required="true" label="Login">
<f:validator validatorId="usuarioExisteValidator" />
</p:inputText>
<p:message for="login" />
Der Validator selbst:
Java:
@FacesValidator(value = "usuarioExisteValidator")
public class UsuarioExisteValidator implements Validator, Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@EJB
private ServicioSeguridad servSegur;
@Override
public void validate(FacesContext context, UIComponent toValidate, Object value)
throws ValidatorException {
String login = (String) value;
if (servSegur.existeUsuario(login)){
FacesMessage message = new FacesMessage("Usuario login: "+login+" ya existe!");
throw new ValidatorException(message);
}
}
}
Die Methode servSegur.existeUsuario in einer StatlessSessionBean:
Java:
public boolean existeUsuario(String login){
Usuario compUsuario = usuario.buscarUsuario(login);
if (compUsuario==null)return false;
else return true;
}
Und die Methode usuario.buscarUsuario(login) aus einem DAO (der auch als StatlessSessionBean implementiert ist.):*
Java:
public Usuario buscarUsuario(String login) {
try{
return em.createNamedQuery("Usuario.findByLogin", Usuario.class).setParameter("login", login)
.getSingleResult();
}catch (EntityNotFoundException ex){
return null;
}catch (NoResultException ex){
return null;
}
}
* Wie gesagt diese letzte Methode wird auch noch von woanders aufgerufen und funktioniert. Ich teste 2x ob ein user schon existiert. einmal in der UI ueber den Validator(funst nicht), und einmal in der Logik in der Methode, die einen neuen User erstellt und diesen in die DB einfügt(funst). (Ist ein wunsch von unserem Prof sowas doppelt zu testen, deshalb).