Olá, estou com o seguinte problema.
Tenho uma View de cadastro e outra de listagem, quando eu selecionar um item da lista e clicar no botão editar que fica ao lado de cada registro, o sistema deveria redirecionar para a mesma página que salva os registros populando os campos da mesma com os valores do respectivo objeto para assim serem feitas as alterações desejadas e salva-las.
Porém meu managed bean é @ViewScoped e pesquisando na internet descobri que ele perde todos os dados cada vez que passar de página na aplicação.
Existe algum meio de segurar estes dados para passá-los de uma view para outra e efetuar a opção de editar?
Obrigado.
ManagedBean
@ManagedBean(name = "userMB")
@ViewScoped
public class UserMB implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserForm form;
private User selectedUser;
private List<User> users = new ArrayList<User>();
public UserMB() {
UserDAO dao = new UserDAOImpl();
users = dao.listar();
form = new UserForm();
}
public String editar() throws IllegalAccessException,
InvocationTargetException {
//REGRAS
return "/protected/user/user.xhtml";
}
//GETS AND SETS
View de Listagem dos Registros
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- template="template/principal.xhtml" -->
<ui:composition template="../../template/principal.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="conteudo">
<h:form id="form" prependId="false">
<!-- <p:messages id="messages"/> -->
<p:dataTable id="userDataTable" var="user" value="#{userMB.users}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15"
emptyMessage="Nenhum registro encontrado!" >
<f:facet name="header">
Lista de Usuários
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="ID" />
</f:facet>
<h:outputText value="#{user.id}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Nome do Usuário" />
</f:facet>
<h:outputText value="#{user.nomeUser}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Usuário" />
</f:facet>
<h:outputText value="#{user.usuario}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Role" />
</f:facet>
<h:outputText value="#{user.role}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="E-Mail" />
</f:facet>
<h:outputText value="#{user.email}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Dt. Cadastro" />
</f:facet>
<h:outputText value="#{user.dtCadastro}">
<f:convertDateTime pattern="dd/MM/yyyy" locale="pt_BR" />
</h:outputText>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Ações"></h:outputText>
</f:facet>
<p:commandButton id="editarUsuario" icon="ui-icon-pencil"
onclick="confirmacaoEditar.show()">
<p:tooltip for="editarUsuario">Editar</p:tooltip>
<f:setPropertyActionListener target="#{userMB.selectedUser}" value="#{user}" />
</p:commandButton>
<p:commandButton id="excluirUsuario" icon="ui-icon-minus"
onclick="confirmacaoExcluir.show()">
<p:tooltip for="excluirUsuario">Excluir</p:tooltip>
<f:setPropertyActionListener target="#{userMB.selectedUser}"
value="#{user}" />
</p:commandButton>
</p:column>
</p:dataTable>
<!-- MENSAGEM PARA CONFIRMAÇÃO DE EDIÇÃO DO USUÁRIO -->
<p:confirmDialog id="confirmacaoDialogEditar"
message="Tem certeza que deseja EDITAR este registro?"
header="Confirmação" severity="alert" widgetVar="confirmacaoEditar">
<p:commandButton id="confirmEditar" value="Sim"
oncomplete="confirmacaoEditar.hide()"
action="#{userMB.editar}" />
<p:commandButton id="declineEditar" value="Cancelar"
onclick="confirmacaoEditar.hide()" type="button" />
</p:confirmDialog>
<!-- MENSAGEM PARA CONFIRMAÇÃO DE EXCLUSÃO DO USUÁRIO -->
<p:confirmDialog id="confirmacaoDialogExcluir"
message="Tem certeza que deseja EXCLUIR este registro?"
header="Confirmação" severity="alert" widgetVar="confirmacaoExcluir">
<p:commandButton ajax="true" id="confirmExcluir" value="Sim"
oncomplete="confirmacaoExcluir.hide()"
actionListener="#{userMB.excluir}" update="form, userDataTable"/>
<p:commandButton id="declineExcluir" value="Cancelar"
onclick="confirmacaoExcluir.hide()" type="button" />
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
View de Salvar e Editar os Registros
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- template="template/principal.xhtml" -->
<ui:composition template="../../template/principal.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<ui:define name="conteudo">
<h:form id="userForm" prependId="false">
<p:messages id="messages" display="icon" />
<p:panel id="painelUser">
<f:facet name="header">
Cadastro e Edição de Usuário
</f:facet>
<table width="100%">
<tr valign="top">
<td width="48%"><p:panelGrid styleClass="boxInterno"
columns="2">
<h:outputLabel for="usuario" value="Usuario: " />
<p:inputText id="usuario" value="#{userMB.form.usuario}"
label="usuario" required="true"/>
<h:outputLabel for="senha" value="Senha: " />
<p:inputText id="senha" value="#{userMB.form.senha}"
label="senha" required="true"/>
<h:outputText value="Role: " />
<p:selectOneMenu required="true" value="#{userMB.form.role}">
<f:selectItem itemLabel="Selecione Um" itemValue="" />
<f:selectItem itemLabel="Administrador" itemValue="ADMIN" />
<f:selectItem itemLabel="Usuário" itemValue="USER" />
</p:selectOneMenu>
</p:panelGrid></td>
<td width="48%"><p:panelGrid styleClass="boxInterno"
columns="2">
<h:outputLabel for="nomeUser" value="Nome: " />
<p:inputText id="nomeUser" value="#{userMB.form.nomeUser}"
label="nomeUser" required="true"/>
<h:outputLabel for="email" value="E-mail: " />
<p:inputText id="email" value="#{userMB.form.email}"
label="email" required="true"/>
<h:outputLabel for="dtCadastro" value="Dt. Cadastro: " />
<p:calendar disabled="true" required="true"
value="#{userMB.form.dtCadastro}" id="dtCadastro">
<f:convertDateTime pattern="dd/MM/yyyy" />
</p:calendar>
</p:panelGrid></td>
</tr>
</table>
<f:facet name="footer">
<p:commandButton action="#{userMB.salvar}" value="Salvar"
icon="ui-icon-circle-check"/>
</f:facet>
</p:panel>
</h:form>
</ui:define>
</ui:composition>