Bom dia caros amigos do GUJ, estou enrolado aqui com um problema aparentemente simples. Desenvolvo uma aplicação usando JSF2 e utilizo a especificação PrimeFaces 2 junto com Mojarra 2. Um cenário comum seria passar um objeto que representa uma entidade do banco entre as requisições, por exemplo quando seleciono uma linha de uma tabela e clico no botão atualizar. Na página de atualização os dados devem estar ligados diretamente nos componentes de tela, conforme foram apresentados na dataTable.
Já tentei usando <h:inputHidden name=“a” value="#{Bean1.x}" binding="{Bean2.x}"> mas a propriedade binding não funcionou, coloquei tudo certinho dentro da tag <h:form> …
tabém tive uma dúvida neste ponto, inputHidden suporta POJOS ou apenas tipos nativos como, Integer, String?
Depois tentei um alternativa do Prime usando o <p:commandButton…>, vou postar a tela toda:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<h:outputStylesheet library="css" name="estilo.css" />
</h:head>
<h:body>
<div id="telaFunc">
<h:form id="ListUsuario" prependId="false">
<h:panelGrid columns="4">
<h:outputLabel id="olUnidade" value="Unidade:" for="cboUnidade" styleClass="lbCampos"/>
<h:selectOneMenu id ="cboUnidade" value="#{FuncionarioBean.funcionario.estruturaOrganizacional.idUnidade}" >
<f:selectItem itemValue="0" itemLabel="Todos" />
<f:selectItems id="selitUnidade" value="#{FuncionarioBean.listaSetores}" var="lista" itemLabel="#{lista.nmSglUnidade}" itemValue="#{lista.idUnidade}" />
</h:selectOneMenu>
<h:outputLabel id="lblTipoUsuario" value="Tipo Usuário:" styleClass="lbCampos" for="cboTipoUsuario"/>
<h:selectOneMenu value="#{FuncionarioBean.tipoUsuario}" id="cboTipoUsuario">
<f:selectItem itemValue="Todos" itemLabel="Todos" />
<f:selectItem itemValue="A" itemLabel="Administrador" />
<f:selectItem itemValue="D" itemLabel="Diretor" />
<f:selectItem itemValue="G" itemLabel="Gerente de Divisao" />
<f:selectItem itemValue="F" itemLabel="Funcionario" />
<f:selectItem itemValue="E" itemLabel="Estagiario" />
</h:selectOneMenu>
<h:outputLabel value="Nome:" for="txtUsuario" styleClass="lbCampos"></h:outputLabel>
<h:inputText id="txtUsuario" value="#{FuncionarioBean.funcionario.nmFuncionario}"/>
<h:outputLabel id="olUsuario" value="Usuário:" styleClass="lbCampos" />
<h:inputText id="login" value="#{FuncionarioBean.login}" />
<h:outputLabel value="CPF:" for="txtCPF" styleClass="lbCampos"></h:outputLabel>
<h:inputText id="txtCPF" value="#{FuncionarioBean.funcionario.nrCpf}"/>
<p:commandButton id="cbBuscar" action="#{FuncionarioBean.buscaFuncionarios}"
styleClass="cbForm" image="ui-icon-search" />
<h:outputText></h:outputText><h:commandButton id="cbNovoUsuario" value="Novo Usuário"
action="#{FuncionarioBean.redirectCadastroNovoFuncionario}" styleClass="cbForm" />
<p:commandButton id="cbLimpar" type="reset" action="#{FuncionarioBean.limparCampos}"
styleClass="cbForm" update="tbbuscaFuncionarios" image="ui-icon-clean" />
</h:panelGrid>
</h:form>
<p></p>
<h:form id="formtable" width="500">
<p:dataTable id="tbbuscaFuncionarios"
value="#{FuncionarioBean.funcionarios}"
var="f"
border="1"
selection="#{FuncionarioBean.funcionario}"
selectionMode="single"
onRowSelectComplete="FunDialog.show()"
onRowSelectUpdate="display"
scrollable="true" width="500">
<p:column id="col01" headerText="Nome" style="max-width:90px">
<h:outputText value="#{f.nmFuncionario}" />
</p:column>
<p:column id="col02" headerText="Usuário" style="max-width:90px">
<h:outputText value="#{f.usuario.nmLogin}" />
</p:column>
<p:column id="col03" headerText="Email" style="min-width:40px;max-width:90px">
<h:outputText value="#{f.nmEmail}" />
</p:column>
<p:column id="col04" headerText="Crachá" style="max-width:90px">
<h:outputText value="#{f.idCracha}" />
</p:column>
<p:column id="col05" headerText="Telefone" style="max-width:90px">
<h:outputText value="#{f.nmFone}" />
</p:column>
<p:column id="col06" headerText="Matricula" style="max-width:90px">
<h:outputText value="#{f.nmMatFuncionario}" />
</p:column>
<p:column id="col07" headerText="CPF" style="max-width:90px">
<h:outputText value="#{f.nrCpf}" />
</p:column>
//Aqui estah onde interessa
<p:column id="col08" headerText="Edit" style="max-width:90px">
<p:commandButton id="btEdit" image="ui-icon-tag" actionListener="FuncionarioBean.atualizaFuncionarioAction" action="#{FuncionarioBean.redirectAtualizaFuncionario}" ajax="false" >
<f:attribute name="funcionario" value="#{f}"/>
</p:commandButton>
</p:column>
<p:column id="col09" headerText="Delete" style="max-width:90px">
<p:commandButton id="tbExcluir" image="ui-icon-close" actionListener="#{UsuarioBean.doModificaStatus}" ajax="false"/>
</p:column>
</p:dataTable>
<p:dialog header="Detalhes Funcionário" widgetVar="FunDialog" resizable="false"
width="400" showEffect="explode" hideEffect="explode">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Nome:" />
<h:outputText value="#{FuncionarioBean.funcionario.nmFuncionario}"/>
<h:outputText value="Usuário:" />
<h:outputText value="#{FuncionarioBean.funcionario.usuario.nmLogin}"/>
<h:outputText value="Email:" />
<h:outputText value="#{FuncionarioBean.funcionario.nmEmail}"/>
<h:outputText value="Crachá:" />
<h:outputText value="#{FuncionarioBean.funcionario.idCracha}"/>
<h:outputText value="Telefone:" />
<h:outputText value="#{FuncionarioBean.funcionario.nmFone}"/>
<h:outputText value="Matricula:" />
<h:outputText value="#{FuncionarioBean.funcionario.nmMatFuncionario}"/>
<h:outputText value="CPF:" />
<h:outputText value="#{FuncionarioBean.funcionario.nrCpf}"/>
</h:panelGrid>
</p:dialog>
</h:form>
</div>
</h:body>
</html>
No meu bean que controla a tela de atualzação qdo se clica no botão editar da dataTable, existe o mesmo objeto funcionario, logo usando actionListener tentei atualizar a referência dele para o objeto funcionario que foi passado via <f:atributte…> na tela que postei:
No mBean:
public String redirectAtualizaFuncionario(){
return "/view/atualizarFuncionario.xhtml?faces-redirect=true";
}
public void atualizaFuncionarioAction(ActionEvent evt){
this.funcionario = (Funcionario)evt.getComponent().getAttributes().get("funcionario");
}
Apoś debuggar notei q ele não me mostra quando o ActionEvent é disparado…
Neste cenário, eu só queria mandar meu objeto selecionado para preencher a tela de atualização, alguém pode me ajudar?
Um abraço a todos…