Pessoal, estou com um problema na alteração de um usuário da dataTable, pois quando clico no link de editar ocorre o erro HTTP Status 500, gostaria de saber o porque de está acontecendo este erro, já pesquisei bastante e não encontrei nada parecido. Desde já agradeço a colaboração de todos. Veja o código:
UsuarioBean
@ManagedBean
@ViewScoped
public class UsuarioBean implements Serializable {
private static final long serialVersionUID = 1L;
private Repositorios repositorios = new Repositorios();
private List<Usuario> usuarios = new ArrayList<Usuario>();
private Usuario usuario = new Usuario();
private Usuario usuarioSelecionado;
@PostConstruct
public void inicializar() {
Usuarios usuarios = this.repositorios.getUsuarios();
this.usuarios = usuarios.todos();
}
public void salvar() {
GestaoUsuarios gestaoUsuarios = new GestaoUsuarios(
this.repositorios.getUsuarios());
try {
gestaoUsuarios.salvar(usuario);
this.usuario = new Usuario();
FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO,
FacesUtil.getMensagemI18n("entry_saved"));
} catch (RegraNegocioException e) {
FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_ERROR,
FacesUtil.getMensagemI18n(e.getMessage()));
}
}
public boolean isEditando() {
return this.usuario.getCodigo() != null;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario)
throws CloneNotSupportedException {
this.usuario = usuario;
if (this.usuario == null) {
this.usuario = new Usuario();
} else {
this.usuario = (Usuario) usuario.clone();
}
}
UsuarioConverter
@FacesConverter(forClass=Usuario.class)
public class UsuarioConverter implements Converter {
private Repositorios repositorios = new Repositorios();
Usuarios usuarios = null;
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Usuario retorno = null;
usuarios = this.repositorios.getUsuarios();
if (value != null && !value.equals("")) {
retorno = usuarios.porCodigo(new Integer(value));
if (retorno == null) {
String descricaoErro = FacesUtil.getMensagemI18n("entry_does_not_exist");
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
descricaoErro, descricaoErro);
throw new ConverterException(message);
}
}
return retorno;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null) {
Integer codigo = ((Usuario) value).getCodigo();
System.out.println("Código retornando: "+ codigo.toString());
return codigo == null ? "" : codigo.toString();
}
return null;
}
}
ConsultaUsuario.xhtml
<ui:composition template="/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="titulo">Consulta de Usuários</ui:define>
<ui:define name="conteudo">
<h:outputStylesheet library="css" name="consulta-usuarios.css"/>
<h:form id="frmPrincipal">
<p:button outcome="CadastroUsuario" value="Novo Usuário"/>
<p:messages id="messages" showDetail="false" autoUpdate="true"
closable="true" />
<p:dataTable id="tabela" var="user" value="#{usuarioBean.usuarios}" paginator="true" rows="15">
<p:column headerText="Nome" sortBy="#{user.nome}">
<h:outputText value="#{user.nome}"/>
</p:column>
<p:column headerText="Login">
<h:outputText value="#{user.login}"/>
</p:column>
<p:column headerText="Cadastrado em">
<center>
<h:outputText value="#{user.dataCadastro.time}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</center>
</p:column>
<p:column headerText="Perfil">
<h:outputText value="#{user.perfil}"/>
</p:column>
<p:column headerText="Ações">
<center>
<h:link outcome="CadastroUsuario">
<h:graphicImage value="/imagens/editar.png"/>
<f:param name="codigo" value="#{user.codigo}"/>
</h:link>
<p:commandLink action="#{usuarioBean.excluir}" update="tabela">
<h:graphicImage value="/imagens/excluir.png"/>
<f:setPropertyActionListener target="#{usuarioBean.usuarioSelecionado}" value="#{user}"/>
<f:ajax render="@form"/>/
</p:commandLink>
</center>
</p:column>
</p:dataTable>
</h:form>
<h:panelGrid columns="4">
<h:form id="impressao" target="_blank">
<h:commandLink actionListener="#{usuarioBean.verPDF}" >
<h:graphicImage value="/imagens/pdf.png" title="Impressão em PDF"/>
</h:commandLink>
</h:form>
</h:panelGrid>
</ui:define>
</ui:composition>
CadastroUsuario.xhtml
<ui:composition template="/template/LayoutPadrao.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="titulo">#{usuarioBean.editando ? 'Alterando Usuário' : 'Novo Usuário'}</ui:define>
<ui:define name="conteudo">
<f:metadata>
<f:viewParam name="codigo" value="#{usuarioBean.usuario}" />
</f:metadata>
<div align="center">
<h:form id="frm" styleClass="margem-formulario">
<p:panel style="width:50%"
header="#{usuarioBean.editando ? 'Alterando Usuário' : 'Novo Usuário'}">
<p:panel>
<p:messages id="messages" showDetail="false" autoUpdate="true"
closable="true" />
<h:panelGrid columns="2">
<h:outputLabel value="Nome" />
<p:inputText size="50" value="#{usuarioBean.usuario.nome}"
required="true" label="Nome" />
<h:outputLabel value="Login" />
<p:inputText size="50" value="#{usuarioBean.usuario.login}"
required="true" label="Login" />
<h:outputLabel value="Senha" />
<p:password id="passworkFeedback"
value="#{usuarioBean.usuario.senha}" feedback="true" />
<h:outputLabel value="Data do cadastro" />
<p:calendar effect="explode"
value="#{usuarioBean.usuario.dataCadastro}" required="true"
label="Data de Cadastro" pattern="dd/MM/yyyy" locale="pt_BR"
timeZone="America/Sao_Paulo">
</p:calendar>
<h:outputLabel value="Permissão de acesso" />
<p:selectOneMenu id="perfil"
value="#{usuarioBean.usuario.perfil}">
<f:selectItem itemLabel="Selecione..." itemValue="Selecione..." />
<f:selectItem itemLabel="Administrador" itemValue="Administrador" />
<f:selectItem itemLabel="Usuário" itemValue="Usuário" />
<f:selectItem itemLabel="Cliente" itemValue="Cliente" />
</p:selectOneMenu>
<h:outputLabel />
<p:commandButton actionListener="#{usuarioBean.salvar}"
value="Salvar" update="frm" />
</h:panelGrid>
</p:panel>
<p:button value="Novo" outcome="CadastroUsuario" />
<p:button value="Consulta" outcome="ConsultaUsuario" />
</p:panel>
</h:form>
</div>
</ui:define>
</ui:composition>