首页 > 解决方案 > 验证约束仅适用于一个领域。Bean 验证 API

问题描述

我在更改表单中的验证消息时遇到问题,我一直在做一些研究并发现了验证约束。

首先,我想验证数据不为空,所以我使用了@NotNull 约束,但它不适用于所有约束,只是代码中的一个,我不知道为什么。

我正在使用 JPA 2.1 EclipseLink

这是豆子:

package cl.beans;

import cl.pojos.Empresa;
import cl.pojos.Hardware;
import cl.pojos.IndiceHardwareFabricante;
import cl.pojos.Software;
import cl.services.EmpresaFacadeLocal;
import cl.services.HardwareFacadeLocal;
import cl.services.IndiceHardwareFabricanteFacadeLocal;
import cl.services.SoftwareFacadeLocal;
import java.util.List;
import javax.ejb.EJB;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.validation.constraints.NotNull;


    @Named(value = "productoBean")
    @RequestScoped
    public class ProductoBean {

    @EJB
    private EmpresaFacadeLocal empresaFacade;

    @EJB
    private IndiceHardwareFabricanteFacadeLocal indiceHardwareFabricanteFacade;

    @EJB
    private SoftwareFacadeLocal softwareFacade;

    @EJB
    private HardwareFacadeLocal hardwareFacade;


    // Variables generales de producto
    private int id;
    private String nombre;
    private Integer costoCliente;
    private Integer costo;
    private int idFabricante;

    // Variables para crear un Hardware
    private String modelo;
    private Integer numeroSerie;
    private String tipoHardware;

    //--

    // Variables para crear un Software
    private String tipoSoftware;
    private int tipoProducto;

    public ProductoBean() {

    }

    public List<Software> getSoftwares(){
        return softwareFacade.findAll();
    }

    public List<Hardware> getHardwares(){
        return hardwareFacade.findAll();
    }

    public String getFabricanteHardware(int idHard){
        IndiceHardwareFabricante indi = indiceHardwareFabricanteFacade.find(idHard);
        Empresa emp = empresaFacade.find(indi.getIdFabricante());
        return emp.getNombrePersona();
    }

    public String getNombreFabricante(int idFab){
        Empresa emp = empresaFacade.find(idFab);
        return emp.getNombrePersona();
    }

    public String crearProducto(){

        if (tipoProducto == 1) {

            int idAutomatico = hardwareFacade.count();
            idAutomatico = idAutomatico + 1;

            Hardware h = new Hardware();
            h.setIdHardware(idAutomatico);
            h.setNombreHardware(nombre);
            h.setModelo(modelo);
            h.setNumeroSerie(numeroSerie);
            h.setCostoClienteHardware(costoCliente);
            h.setCostoHardware(costo);

            IndiceHardwareFabricante indiHardFab = new IndiceHardwareFabricante();

            indiHardFab.setIdFabricante(idFabricante);

            indiHardFab.setIdHardware(h.getIdHardware());

            indiceHardwareFabricanteFacade.create(indiHardFab);

            hardwareFacade.create(h);

            nombre = null;

            return "/ingresarProducto.xhtml?faces-redirect=true";

        } else if (tipoProducto == 2) {

            int idAutomatico = softwareFacade.count();

            idAutomatico = idAutomatico + 1;

            Software s = new Software();
            s.setIdFabricante(idFabricante);
            s.setNombreSoftware(nombre);
            s.setIdSoftware(idAutomatico);

            Software soft = softwareFacade.find(id);

            soft.getCostoClienteSoftware();



            softwareFacade.create(s);

            nombre = null;

            return "/ingresarProducto.xhtml?faces-redirect=true";
        }

        return "/ingresarProducto.xhtml?faces-redirect=false";
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @NotNull(message = "Debe ingresar un nombre.")
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    @NotNull(message = "Debe ingresar un nùmero de serie.")
    public Integer getNumeroSerie() {
        return numeroSerie;
    }

    public void setNumeroSerie(Integer numeroSerie) {
        this.numeroSerie = numeroSerie;
    }


    public String getTipoHardware() {
        return tipoHardware;
    }

    public void setTipoHardware(String tipoHardware) {
        this.tipoHardware = tipoHardware;
    }

    public String getTipoSoftware() {
        return tipoSoftware;
    }

    public void setTipoSoftware(String tipoSoftware) {
        this.tipoSoftware = tipoSoftware;
    }

    public int getIdFabricante() {
        return idFabricante;
    }

    public void setIdFabricante(int idFabricante) {
        this.idFabricante = idFabricante;
    }

    public int getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(int tipoProducto) {
        this.tipoProducto = tipoProducto;
    }

    public Integer getCostoCliente() {
        return costoCliente;
    }

    public void setCostoCliente(Integer costoCliente) {
        this.costoCliente = costoCliente;
    }

    public Integer getCosto() {
        return costo;
    }

    public void setCosto(Integer costo) {
        this.costo = costo;
    }

}

如您所见,我为“名词”和“número de serie”添加了@NotNull。

@NotNull(message = "Debe ingresar un nombre.")
public String getNombre() {
    return nombre;
}

.

@NotNull(message = "Debe ingresar un nùmero de serie.")
public Integer getNumeroSerie() {
    return numeroSerie;
}

这就是页面上验证消息的样子:

XHMTL 中的结果图像

谢谢您的帮助!

标签: javaejbconstraintsjavabeansbean-validation

解决方案


推荐阅读