3
In XHTML, my Selectonemenu is giving validation error at Issue time:
                <p:selectOneMenu value="#{relatorioProdutosLogsBean.usuarioSelecionado}">
                    <f:selectItem itemLabel="Selecione" itemValue="" />
                    <f:selectItems value="#{relatorioProdutosLogsBean.usuariosDisponiveis}"
                        var="usuario" itemLabel="#{usuario.nome}" itemValue="#{usuario}" />
                </p:selectOneMenu>
User Serializable Implements:
private static final long serialVersionUID = 1L;
private Long id;
private String nome;
private String email;
private String senha;
private List<Grupo> grupos = new ArrayList<>();
@Id
@GeneratedValue
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
@Column(nullable = false, length = 80)
public String getNome() {
    return nome;
}
public void setNome(String nome) {
    this.nome = nome;
}
@Column(nullable = false, unique = true, length = 255)
public String getEmail() {
    return email;
}
public void setEmail(String email) {
    this.email = email;
}
@Column(nullable = false, length = 20)
public String getSenha() {
    return senha;
}
public void setSenha(String senha) {
    this.senha = senha;
}
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "usuario_grupo", joinColumns = @JoinColumn(name="usuario_id"),
        inverseJoinColumns = @JoinColumn(name = "grupo_id"))
public List<Grupo> getGrupos() {
    return grupos;
}
public void setGrupos(List<Grupo> grupos) {
    this.grupos = grupos;
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}
@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Usuario other = (Usuario) obj;
    if (id == null) {
        if (other.id != null)
            return false;
    } else if (!id.equals(other.id))
        return false;
    return true;
}
Users Serializable Formulas:
private static final long serialVersionUID = 1L;
@Inject
private EntityManager manager;
public Usuario guardar(Usuario usuario) {
    return manager.merge(usuario);
}
@Transactional
public void remover(Usuario usuario) {
    try {
        usuario = porId(usuario.getId());
        manager.remove(usuario);
        manager.flush();
    } catch (PersistenceException e) {
        throw new NegocioException("Usuario " + usuario.getNome() + " não pode ser excluído.");
    }
}
public Usuario porId(Long id) {
    return manager.find(Usuario.class, id);
}
public Usuario porNomeOuEmail(String nome, String email) {
    try {
        return manager.createQuery("from Usuario where upper(nome) = :nome and email = :email", Usuario.class)
                .setParameter("nome", nome.toUpperCase())
                .setParameter("email", email.toUpperCase())
                .getSingleResult();
    } catch (NoResultException e) {
        return null;
    }
}
public Usuario porEmail(String email) {
    Usuario usuario = null;
    try {
        usuario = this.manager.createQuery("from Usuario where lower(email) = :email", Usuario.class)
            .setParameter("email", email.toLowerCase()).getSingleResult();
    } catch (NoResultException e) {
        // nenhum usuário encontrado com o e-mail informado
    }
    return usuario;
}
@SuppressWarnings("unchecked")
public List<Usuario> filtrados(UsuarioFilter filtro) {
    Session session = manager.unwrap(Session.class);
    Criteria criteria = session.createCriteria(Usuario.class);
    if (StringUtils.isNotBlank(filtro.getNome())) {
        criteria.add(Restrictions.ilike("nome", filtro.getNome(), MatchMode.ANYWHERE));
    }
    return criteria.addOrder(Order.asc("nome")).list();
}
public List<Usuario> vendedores() {
    return this.manager.createQuery("from Usuario", Usuario.class)
            .getResultList();
}
@SuppressWarnings("unchecked")
public List<Usuario> todos() {
    Session session = manager.unwrap(Session.class);
    Criteria criteria = session.createCriteria(Usuario.class);
    return criteria.addOrder(Order.asc("nome")).list();
}
Users convert Mplements Converter:
private Usuarios usuarios;
public UsuarioConverter() {
    this.usuarios = (Usuarios) CDIServiceLocator.getBean(Usuarios.class);
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
    Usuario retorno = null;
    if (value != null) {
        retorno = this.usuarios.porId(new Long(value));
    }
    return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    if(value != null) {       
        Usuario usuario = (Usuario) value;
        return usuario.getId() == null ? null : usuario.getId().toString();
    }
    return "";
}
RelatorioProdutosLogsBean implements Serializable:
private static final long serialVersionUID = 1L;
private Date dataInicio;
private Date dataFim;
@Inject
private FacesContext facesContext;
@Inject
private Usuarios usuarios;
@Inject
private HttpServletResponse response;
@Inject
private EntityManager manager;
private Usuario usuarioSelecionado;
private List<Usuario> usuariosDisponiveis;
public List<Usuario> getUsuariosDisponiveis() {
    return usuariosDisponiveis;
}
public void setUsuariosDisponiveis(List<Usuario> usuariosDisponiveis) {
    this.usuariosDisponiveis = usuariosDisponiveis;
}
public void inicializar() {
    if (FacesUtil.isNotPostback()) {
        usuariosDisponiveis = usuarios.todos();
    }
}
public void emitir() {
    Map<String, Object> parametros = new HashMap<>();
    parametros.put("data_inicio", this.dataInicio);
    parametros.put("data_fim", this.dataFim);
    if(usuarioSelecionado.getNome().equals("")){
        parametros.put("nome", "%%");
    } else {
        parametros.put("nome", usuarioSelecionado.getNome());
    }
    ExecutorRelatorio executor = new ExecutorRelatorio("/relatorios/relatorio_produtos_logs.jasper",
            this.response, parametros, "ProdutoLog.pdf");
    Session session = manager.unwrap(Session.class);
    session.doWork(executor);
    if (executor.isRelatorioGerado()) {
        facesContext.responseComplete();
    } else {
        FacesUtil.addErrorMessage("A execução do relatório não retornou dados.");
    }
}
public Date getDataInicio() {
    return dataInicio;
}
public void setDataInicio(Date dataInicio) {
    this.dataInicio = dataInicio;
}
public Date getDataFim() {
    return dataFim;
}
public void setDataFim(Date dataFim) {
    this.dataFim = dataFim;
}
public Usuario getUsuarioSelecionado() {
    return usuarioSelecionado;
}
public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
    this.usuarioSelecionado = usuarioSelecionado;
}
Reportproducts:
<f:metadata>
    <f:event listener="#{relatorioProdutosLogsBean.inicializar}"
        type="preRenderView" />
</f:metadata>
<ui:define name="titulo">Relatório de pedidos emitidos</ui:define>
<ui:define name="corpo">
    <h:form id="frm">
        <h1>Relatório de pedidos emitidos</h1>
        <p:messages autoUpdate="true" closable="true" />
        <p:toolbar style="margin-top: 20px">
            <p:toolbarGroup>
                <p:commandButton value="Emitir"
                    action="#{relatorioProdutosLogsBean.emitir}" ajax="false" />
            </p:toolbarGroup>
        </p:toolbar>
        <p:panelGrid columns="2" id="painel2"
            style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
            <p:outputLabel value="Data de criação" />
            <h:panelGroup>
                <p:calendar value="#{relatorioProdutosLogsBean.dataInicio}"
                    label="Data inicial" pattern="dd/MM/yyyy" size="10" />
                <p:spacer width="8" />
                <h:outputText value="a" />
                <p:spacer width="8" />
                <p:calendar value="#{relatorioProdutosLogsBean.dataFim}"
                    label="Data final" pattern="dd/MM/yyyy" size="10" />
            </h:panelGroup>
        </p:panelGrid>
        <p:panelGrid columns="2" id="painel"
            style="width: 100%; margin-top: 20px" columnClasses="rotulo, campo">
            <p:outputLabel value="Nome" />
            <h:panelGroup>
                <p:selectOneMenu value="#{relatorioProdutosLogsBean.usuarioSelecionado}">
                    <f:selectItem itemLabel="Selecione" itemValue="" />
                    <f:selectItems value="#{relatorioProdutosLogsBean.usuariosDisponiveis}"
                        var="usuario" itemLabel="#{usuario.nome}" itemValue="#{usuario}" />
                </p:selectOneMenu>
            </h:panelGroup>
        </p:panelGrid>
    </h:form>
</ui:define>