E ae galera,
Agora que deu para pegar bem quando utilizar cada tipo de escopo surgiu a dúvida, como faço para editar um valor selecionado em minha tabela utilizando um @RequestScoped. Não quero utilizar o @SessionScoped porque não vejo toda essa necessidade.
Abaixo segue o meu código, teoricamente a ideia é atribuir a entidade do MB o registro selecionado na tabela, mas não sei porque isso não está funcionando. Ou seja, quando clico no botão editar, a entidade do MB que deveria vir do registro selecionado é nulo.
Detalhe: Os meus botões não estão em minha tabela, e sim em uma página acima da página com a tabela de registros.
Tela principal do caso de uso
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
template="/resources/theme/template.xhtml">
<ui:define name="centro">
<p:layout>
<h:form id="botoes">
<p:layoutUnit position="north" size="5%">
<p:splitButton value="Listar" icon="ui-icon-refresh" action="#{paisController.lista}" >
<p:menuitem value="Novo" icon="ui-icon-document" action="#{paisController.preparaParaAdicionar}" ajax="false"/>
<p:menuitem value="Editar" icon="ui-icon-arrowrefresh-1-w" action="#{paisController.preparaParaAlterar}"/>
<p:menuitem value="Apagar" icon="ui-icon-close" action="#{paisController.remove}" ajax="false" />
</p:splitButton>
</p:layoutUnit>
<p:layoutUnit position="center">
<ui:insert name="form">
</ui:insert>
</p:layoutUnit>
</h:form>
</p:layout>
</ui:define>
</ui:composition>
Lista do caso de uso
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
template="/pages/ope/pais/PaisManagementView.xhtml">
<ui:define name="form">
<p:dataTable id="tabela" var="pais" value="#{paisController.paises}" selectionMode="single" selection="#{paisController.pais}" rowKey="#{pais.nome}">
<p:column headerText="Código"> #{pais.id.codigo} </p:column>
<p:column headerText="Filial"> #{pais.id.filial.nome} </p:column>
<p:column headerText="Nome"> #{pais.nome} </p:column>
</p:dataTable>
</ui:define>
</ui:composition>
Ficha do caso de uso
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core"
template="/pages/ope/pais/PaisManagementView.xhtml">
<ui:define name="form">
<p:panelGrid id="panel" columns="2" style="margin-bottom:10px">
<h:outputLabel value="Código:" />
<p:inputText id="codigo" value="#{paisController.pais.id.codigo}"/>
<h:outputLabel value="Filial:" />
<p:inputText id="filial" value="#{paisController.pais.id.filial.id.codigo}"/>
<h:outputLabel value="Nome:" />
<p:inputText id="nome" value="#{paisController.pais.nome}"/>
<p:commandButton id="inserir" value="Inserir" action="#{paisController.adiciona}" ajax="false" />
</p:panelGrid>
</ui:define>
</ui:composition>
MB
@ManagedBean
@RequestScoped
public class PaisController extends ControllerAbstract<Pais,PaisService>
{
private Pais pais = new Pais();
private List<Pais> paises = new ArrayList<Pais>();
@Autowired
public PaisController()
{
pais = new Pais();
pais.getId().setFilial(new Filial());
}
public String lista()
{
paises = getService().getAllEntityAtivo();
return "/pages/ope/pais/form/ListaPais";
}
private void limpa()
{
pais = new Pais();
pais.getId().setFilial(new Filial());
}
public String preparaParaAdicionar()
{
limpa();
return "/pages/ope/pais/form/FichaPais";
}
public String adiciona()
{
pais.setSituacao("A");
getService().insert(pais);
lista();
return "/pages/ope/pais/form/ListaPais";
}
public void remove()
{
getService().remove(pais);
lista();
}
public String preparaParaAlterar()
{
this.pais = getService().findById(pais.getId(),true);
return "/pages/ope/pais/form/FichaPais";
}
public void altera()
{
getService().update(pais);
}
/*-------------------------------------------------------------------
* GETTERS AND SETTERS
*-------------------------------------------------------------------*/
public Pais getPais()
{
return pais;
}
public void setPais(Pais pais)
{
this.pais = pais;
}
public List<Pais> getPaises()
{
return paises;
}
public void setPaises(List<Pais> paises)
{
this.paises = paises;
}
}