In XHTML, my SelectOneMenu is giving validation error at the time of Issue:
<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 implements Serializable:
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 implements Serializable:
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();
}
UserConverter implements 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 "";
}
ReportProductsLogsBean 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;
}
ProductReportLogs.xhtml:
<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>