Validation for uniqueness in the DB
adriju Feb 15, 2008 6:28 AMHi all again!
I have a form in which I edit or create users from a DB. To check the uniqueness of the username I have created a custom validator:
@Name("userNameValidator")
@BypassInterceptors
@Validator
public class UserNameValidator implements javax.faces.validator.Validator
{
@Override
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
UsuariosList uList1 = new UsuariosList();
String s = value.toString();
String select1 = "select u from Usuarios u where u.nombreUsuario = '" + s + "'";
uList1.setEjbql(select1);
List lu1 = uList1.getResultList();
uList1.restoreEjbql();
if( lu1.size() > 0 )
{
FacesMessage message = new FacesMessage();
message.setDetail("Repeated user in the DB");
message.setSummary("The user " + s + " already exists in the DB");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesMessages.instance().add(message);
throw new ValidatorException(message);
}
}
}And the input text is:
<s:decorate id="nombreUsuarioDecoration" template="layout/edit.xhtml">
<ui:define name="label">User</ui:define>
<h:inputText id="nombreUsuario"
required="true"
value="#{usuariosHome.instance.nombreUsuario}"
validator="userNameValidator">
</h:inputText>
</s:decorate>This is th entity:
@Entity
@Table(name = "USUARIOS")
public class Usuarios implements java.io.Serializable {
private long codUsuario;
private GruposUsuarios gruposUsuarios;
private String nombreUsuario;
private Short prioridadUsuario;
private String passwordUsuario;
private String filtroUsuario;
private String snmpUsuario;
private Set<TemispConfiguracion> temispConfiguracions = new HashSet<TemispConfiguracion>(
0);
private Set<FiltrosFichas> filtrosFichases = new HashSet<FiltrosFichas>(0);
private Set<Operacion> operacions = new HashSet<Operacion>(0);
private Set<Macro> macros = new HashSet<Macro>(0);
private Set<NuevaConfiguracion> nuevaConfiguracions = new HashSet<NuevaConfiguracion>(
0);
private Set<Grupo> grupos = new HashSet<Grupo>(0);
public Usuarios() {
}
public Usuarios(long codUsuario, GruposUsuarios gruposUsuarios) {
this.codUsuario = codUsuario;
this.gruposUsuarios = gruposUsuarios;
}
public Usuarios(long codUsuario, GruposUsuarios gruposUsuarios,
String nombreUsuario, Short prioridadUsuario,
String passwordUsuario, String filtroUsuario, String snmpUsuario,
Set<TemispConfiguracion> temispConfiguracions,
Set<FiltrosFichas> filtrosFichases, Set<Operacion> operacions,
Set<Macro> macros, Set<NuevaConfiguracion> nuevaConfiguracions,
Set<Grupo> grupos) {
this.codUsuario = codUsuario;
this.gruposUsuarios = gruposUsuarios;
this.nombreUsuario = nombreUsuario;
this.prioridadUsuario = prioridadUsuario;
this.passwordUsuario = passwordUsuario;
this.filtroUsuario = filtroUsuario;
this.snmpUsuario = snmpUsuario;
this.temispConfiguracions = temispConfiguracions;
this.filtrosFichases = filtrosFichases;
this.operacions = operacions;
this.macros = macros;
this.nuevaConfiguracions = nuevaConfiguracions;
this.grupos = grupos;
}
@Id
@Column(name = "COD_USUARIO", unique = true, nullable = false, precision = 10, scale = 0)
@NotNull
public long getCodUsuario() {
return this.codUsuario;
}
public void setCodUsuario(long codUsuario) {
this.codUsuario = codUsuario;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "COD_GRUPOS_USUARIOS", nullable = false)
@NotNull
public GruposUsuarios getGruposUsuarios() {
return this.gruposUsuarios;
}
public void setGruposUsuarios(GruposUsuarios gruposUsuarios) {
this.gruposUsuarios = gruposUsuarios;
}
@Column(name = "NOMBRE_USUARIO", length = 60)
@Length(max = 60)
public String getNombreUsuario() {
return this.nombreUsuario;
}
public void setNombreUsuario(String nombreUsuario) {
this.nombreUsuario = nombreUsuario;
}
@Column(name = "PRIORIDAD_USUARIO", precision = 3, scale = 0)
public Short getPrioridadUsuario() {
return this.prioridadUsuario;
}
public void setPrioridadUsuario(Short prioridadUsuario) {
this.prioridadUsuario = prioridadUsuario;
}
@Column(name = "PASSWORD_USUARIO", length = 128)
@Length(max = 128)
public String getPasswordUsuario() {
return this.passwordUsuario;
}
public void setPasswordUsuario(String passwordUsuario) {
this.passwordUsuario = passwordUsuario;
}
@Column(name = "FILTRO_USUARIO", length = 20)
@Length(max = 20)
public String getFiltroUsuario() {
return this.filtroUsuario;
}
public void setFiltroUsuario(String filtroUsuario) {
this.filtroUsuario = filtroUsuario;
}
@Column(name = "SNMP_USUARIO", length = 20)
@Length(max = 20)
public String getSnmpUsuario() {
return this.snmpUsuario;
}
public void setSnmpUsuario(String snmpUsuario) {
this.snmpUsuario = snmpUsuario;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<TemispConfiguracion> getTemispConfiguracions() {
return this.temispConfiguracions;
}
public void setTemispConfiguracions(
Set<TemispConfiguracion> temispConfiguracions) {
this.temispConfiguracions = temispConfiguracions;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<FiltrosFichas> getFiltrosFichases() {
return this.filtrosFichases;
}
public void setFiltrosFichases(Set<FiltrosFichas> filtrosFichases) {
this.filtrosFichases = filtrosFichases;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<Operacion> getOperacions() {
return this.operacions;
}
public void setOperacions(Set<Operacion> operacions) {
this.operacions = operacions;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<Macro> getMacros() {
return this.macros;
}
public void setMacros(Set<Macro> macros) {
this.macros = macros;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<NuevaConfiguracion> getNuevaConfiguracions() {
return this.nuevaConfiguracions;
}
public void setNuevaConfiguracions(
Set<NuevaConfiguracion> nuevaConfiguracions) {
this.nuevaConfiguracions = nuevaConfiguracions;
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
public Set<Grupo> getGrupos() {
return this.grupos;
}
public void setGrupos(Set<Grupo> grupos) {
this.grupos = grupos;
}
}When I create a new user, it works fine. When I edit one user and try to set the name of another, it works fine. The problem comes when trying to edit a user without editing his name, the validator makes the validation and works 'fine', but I don't want this, I want it only to validate when the inputText changes.
How can I do this?
Thanks in advance.