Duvida com Primefaces

Estou iniciando com primefaces e jsf2 e estou tendo muitas duvidas, tenho um projeto que foi desenvolvido com jsp e servlets que tenho que migrar ele para jsf.

Minhas duvidas são até agora:

1 - Tenho uma pagina onde mostra uma lista de usuários em um dataTable, por exemplo, e na mesma pagina tenho as opções de alterar excluir e incluir, essas operações são realizadas por meio de uma chamada a um dialog modal, só que se eu clico em alterar um registro quando eu clico em alterar outro ele carrega as informações anteriores, se eu clico depois em novo usuário ele abre outro dialog mas tambem ja preenchido com dados deoutra alteração, ou as vezes quando vou em alterar ele não carrega valor nenhum.

2 - Em uma dessas minhas entidades tenho uma propriedade boolean, estou usando mysql e com jsp eu tenho um campo no bd do tipo varchar que salvo ‘S’ ou ‘N’, ai fui tentar utilizar o selectBooleanCheckbox, mas não sei como fazer a conversão antes de salvar de boolean para string.

Espero que possam me ajudar.

cara se você ta usando jsf da uma olha no mapeamento do seu bean
no escopo pois tem um opção que quando você utiliza o bean vem preenchido com dados e passa para a sua view mostarando no seu xhtml

tem que ir parte por parte, colocar o que vc fez, e fazer a pergunta…

quando vc clicar em novo vc temque dar new no objeto, para ele zerar as informações

erickfm8 obrigado pela ajuda, mas não ta dando certo, no meu controller eu tenho esse metodo

public String prepararAdicionarConvenio(){ convenio = new Convenio(); return "convenio"; }

e na pagina eu chamo assim:

<p:commandLink value="Novo Convênio" actionListener="#{convenioController.prepararAdicionarConvenio()}" update="infosConvenio" oncomplete="salvaEmpresa.show()"/>

Se eu ja tiver aberto o dialog de alteração, quando eu clico em novo ele carrega as informações do dialog de alteração, sendo que são dois dialogs diferentes, um para novo e outro para alteração.

qual scopo que vc esta usando?

Não sei. :oops: onde eu defino o scopo?

Parece que vc tem q estudar um pouquinho de servlet e jsp meu querido - http://www.submarino.com.br/produto/1/1138677

Servlet e JSP não… eu estou com duvidas com JSF2 e Pirmefeces.

1 - Tenho uma pagina onde mostra uma lista de usuários em um dataTable, por exemplo, e na mesma pagina tenho as opções de alterar excluir e incluir, essas operações são realizadas por meio de uma chamada a um dialog modal, só que se eu clico em alterar um registro quando eu clico em alterar outro ele carrega as informações anteriores, se eu clico depois em novo usuário ele abre outro dialog mas tambem ja preenchido com dados de outra alteração, ou as vezes quando vou em alterar ele não carrega valor nenhum.
O escopo que ta usando esta errado…vc precisa saber oque a pagina faz para escolher o escopo certo…pelo que parece o escopo esta maior que vc gostaria que fosse. Controle de escopos não tem relação com JSF.

2 - Em uma dessas minhas entidades tenho uma propriedade boolean, estou usando mysql e com jsp eu tenho um campo no bd do tipo varchar que salvo ‘S’ ou ‘N’, ai fui tentar utilizar o selectBooleanCheckbox, mas não sei como fazer a conversão antes de salvar de boolean para string.
Não sabe o que? Não sabe como fazer? ou aonde fazer? Pergunta esta muito abrangente…fica difícil para o pessoal que quer ajudar responder algo…

FernandoFranzini, obrigado por ajudar, vou dar uma olhada no escopo, quanto ao selectBooleanCheckbox, eu não sei onde mesmo fazer a conversão.

Blz velho, podemos começar por partes
primeiro mostra esta classe aqui:

convenioController

provavelmente ela é o tem bean.

segundo, vc esta usando annotations ou configurou em seu faces-config.xml

aconcelho usar annotations.

Mostra seu web.xml vendo isto acho que resolvemos a primeira parte do seu problema

Depois vc precisa olhar como utilizar os componentes do JSF.

No caso do selectone, se eu nao me engano, ele te retorna true se estiver checado, sendo assim, vc pode fazer uma verificação no converter dele, caso seja true ele te retornar ‘S’, caso false te retornar ‘N’

mostra mais detalhes sobre seu problema

Ok, segue a classe convenioController

[code]package controller;

import dao.DaoConvenio;
import entidade.Convenio;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

@ManagedBean
@SessionScoped
public class ConvenioController {

private Convenio convenio;
private DataModel listaConvenio;

public DataModel getListarConvenio(){
    List<Convenio> lista = new DaoConvenio().listaTodos();
    listaConvenio = new ListDataModel(lista);
    return listaConvenio;
}

public Convenio getConvenio(){
    return convenio;
}

public void setConvenio(Convenio convenio){
    this.convenio = convenio;
}

public String verConvenio(){
    return "convenio";
}

public String prepararAdicionarConvenio(){
    convenio = new Convenio();
    return "convenio";
}

public String prepararAlterarConvenio(){
    convenio = (Convenio)(listaConvenio.getRowData());
    return "convenio";
}

public String excluirConvenio(){
    Convenio convenioTemp = (Convenio)(listaConvenio.getRowData());
    DaoConvenio dao = new DaoConvenio();
    dao.excluir(convenioTemp);
    return "convenio";
}

public String salvarConvenio(){        
    DaoConvenio dao = new DaoConvenio();
    dao.salvar(convenio);
    return "convenio";
}

public String alterarConvenio(){
    DaoConvenio dao = new DaoConvenio();
    dao.alterar(convenio);
    return "convenio";
}

}
[/code]
E aqui o web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Production</param-value> </context-param> <context-param> <param-name>primefaces.THEME</param-name> <param-value>blitzer</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>faces/index.xhtml</welcome-file> </welcome-file-list> </web-app>

Tem varios lugares

  1. No ManagedBean,
  2. Na sua camada de persistencia Dao/Eoa/JPA
  3. Usando os conversores do JSF. (Mais indicado !)

seu selectonecheckbox esta funcionando?

se sim, vc pode criar um método que faz a conversão para vc
tipo:

resultado(char tipo){
   if(tipo == 'S'){
        return true;      
   }
   return false;
}

acho que não entendi direito, mas vc pode até mudar o tipo do atributo da sua classe para ficar igual ao banco.

Eu criei um conversor, eu estou utilizando boolean nos atributos justamente porque o selectBooleanCheckbox só retorna boolean (a não ser que eu criasse um conversor), por que a principio estavam como Strings mas mudei.

kra estou com o mesmo problema que vc…
poderia me ajudar com a solução?!?! vc conseguiu???


package br.unemat.bbg.controller;

import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.unemat.bbg.dao.DAO;
import br.unemat.bbg.dao.UsuarioDAO;
import br.unemat.bbg.model.Usuario;

@ManagedBean
@SessionScoped
@SuppressWarnings({ "unchecked", "rawtypes" })
public class UsuarioController {

	private Usuario usuario;

	private DataModel listaUsuarios;

	public DataModel getListarUsuarios() {
		List<Usuario> lista = new UsuarioDAO().list();
		listaUsuarios = new ListDataModel(lista);
		return listaUsuarios;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public void prepararAdicionarUsuario(ActionEvent actionEvent) {		
		usuario = new Usuario();
	}

	public void prepararAlterarUsuario(ActionEvent actionEvent) {
		usuario = (Usuario) (listaUsuarios.getRowData());
	}

	public String excluirUsuario() {
		Usuario usuarioTemp = (Usuario) (listaUsuarios.getRowData());
		DAO dao = new UsuarioDAO();
		dao.remove(usuarioTemp);
		return "/pages/cadastros/usuario.jsf";
	}

	public void adicionarUsuario(ActionEvent actionEvent) {
		DAO dao = new UsuarioDAO();
		dao.save(usuario);
		prepararAdicionarUsuario(actionEvent);
	}

	public void alterarUsuario(ActionEvent actionEvent) {
		DAO dao = new UsuarioDAO();
		dao.update(usuario);
	}

}

[code]

<h:head>
<f:loadBundle var=“msgs” basename=“messages” />

<h:outputText value="#{msgs.SistemaLabelEstagio}" />

</h:head>
<h:body>

	<f:view>

		<p:layout fullPage="true">

			<!-- Topo -->

			<p:layoutUnit position="top" height="102" collapsible="true">
				<div
					style="font-family: Tahoma; text-align: right; font-size: 16pt">
					<h3>
						<h:outputText value="Gerenciador de Usuários" />
						<!--  &nbsp; &nbsp; &nbsp;-->
					</h3>
					<h:panelGrid>
					</h:panelGrid>

				</div>
			</p:layoutUnit>


			<!-- Lado Esquerdo -->

			<p:layoutUnit position="left" width="150" header="Atividades"
				resizable="true" collapsible="true">
				<h:form prependId="false">
					<center>
						<br />
						<p:commandButton value="Novo" style="width:100%"
							actionListener="#{usuarioController.prepararAdicionarUsuario}"
							update="infosLivro" oncomplete="dlg_GerenciadorUsuario.show()"
							image="ui-icon-circle-plus" />

						<p:commandButton image="ui-icon-help" value="Ajuda"
							onclick="dlg_Ajuda.show();" type="button" style="width:100%" />


						<br /> <br />
						<h:commandLink title="Voltar " action="home" immediate="true">
							<h:graphicImage value="/images/voltar.png" />
						</h:commandLink>

					</center>
				</h:form>
			</p:layoutUnit>


			<!-- Centro -->

			<p:layoutUnit position="center">
				<br />
				<h:form prependId="false">
					<p:dataTable id="tabela" var="usuario"
						value="#{usuarioController.listarUsuarios}" paginator="true"
						rows="5">
						<p:column>
							<f:facet name="header">
								<h:outputText value="Código" />
							</f:facet>
							<h:outputText value="#{usuario.id}" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Nome" />
							</f:facet>
							<h:outputText value="#{usuario.nome}" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Login" />
							</f:facet>
							<h:outputText value="#{usuario.login}" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="E-mail" />
							</f:facet>
							<h:outputText value="#{usuario.email}" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Telefone" />
							</f:facet>
							<h:outputText value="#{usuario.telefone}" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Bloqueado" />
							</f:facet>
							<h:outputText value="#{usuario.bloqueado}" />
						</p:column>
						<p:column width="20%">
							<f:facet name="header">
								<h:outputText value="Alterar" />
							</f:facet>
							<p:commandButton
								actionListener="#{usuarioController.prepararAlterarUsuario}"
								value="Alterar" update="infoUsuario"
								oncomplete="dlg_GerenciadorUsuario.show()"
								image="ui-icon ui-icon-edit">
							</p:commandButton>
							<p:graphicImage value="/images/edit.gif" />
						</p:column>
						<p:column>
							<f:facet name="header">
								<h:outputText value="Excluir" />
							</f:facet>
							<h:commandLink action="#{usuarioController.excluirUsuario}"
								value="Excluir" />
						</p:column>
					</p:dataTable>


					<h:panelGrid columns="2">
						<p:panel header="Exportar Dados">
							<h:commandLink title="PDF">
								<h:graphicImage value="/images/pdf2.png" />
								<p:dataExporter type="pdf" target="tabela" fileName="usuarios" />
							</h:commandLink>
							<h:commandLink title="Excel">
								<h:graphicImage value="/images/excel.png" />
								<p:dataExporter type="xls" target="tabela" fileName="usuarios" />
							</h:commandLink>
						</p:panel>
					</h:panelGrid>

				</h:form>

			</p:layoutUnit>

		</p:layout>


		<!-- Caixas de Dialogos -->

		<p:dialog header=".: Sistema - Ajuda :. " widgetVar="dlg_Ajuda"
			showEffect="bounce" hideEffect="explode" height="400" width="600">
			<h:outputText value="This dialog has cool effects." />
		</p:dialog>

		<p:dialog header="Cadastro de Usuário"
			widgetVar="dlg_GerenciadorUsuario" resizable="false" modal="true"
			showEffect="bounce" hideEffect="explode" width="500">
			<h:form prependId="false">
				<h:panelGrid id="infoUsuario" columns="1"
					style="margin-bottom:10px">

					<h:outputLabel for="nome" value="Nome:" />
					<p:inputText id="nome" value="#{usuarioController.usuario.nome}"
						required="true" />

					<h:outputLabel for="login" value="Login:" />
					<p:inputText id="login" value="#{usuarioController.usuario.login}" />

					<h:outputLabel for="senha" value="Senha:" />
					<p:growl id="msgs" showDetail="true" />
					<p:password id="senha" value="#{usuarioController.usuario.senha}"
						promptLabel="Digite uma senha" weakLabel="Senha Fraca"
						goodLabel="Senha Razoável" strongLabel="Senha Forte" />

					<h:outputLabel for="email" value="E-mail:" />
					<p:inputText id="email" value="#{usuarioController.usuario.email}" />

					<h:outputLabel for="telefone" value="Telefone:" />
					<p:inputMask id="telefone" mask="(99)9999-9999"
						value="#{usuarioController.usuario.telefone}" />

					<h:outputLabel for="bloqueado" value="Bloqueado:" />
					<h:selectOneMenu id="bloqueado"
						value="#{usuarioController.usuario.bloqueado}">
						<f:selectItem itemLabel="Sim" itemValue="S" />
						<f:selectItem itemLabel="Não" itemValue="N" />
					</h:selectOneMenu>

					<p:commandButton update="tabela"
						oncomplete="dlg_GerenciadorUsuario.hide();"
						actionListener="#{usuarioController.adicionarUsuario}"
						value="Salvar" image="ui-icon-disk" />
					<p:commandButton update="tabela"
						oncomplete="dlg_GerenciadorUsuario.hide();"
						actionListener="#{usuarioController.alterarUsuario}"
						value="Alterar" image="ui-icon-document" />

				</h:panelGrid>
			</h:form>
		</p:dialog>

	</f:view>
</div>

</h:body>

[/code] [code]

package br.unemat.bbg.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.unemat.bbg.model.Usuario;
import br.unemat.bbg.util.HibernateUtil;

public class UsuarioDAO implements DAO {

@Override
public void save(Usuario usuario) throws DAOException {
	Session session = HibernateUtil.getSessionFactory().openSession();
	Transaction t = session.beginTransaction();
	try {
		session.save(usuario);
		t.commit();
		usuario = null;
	} catch (Exception e) {
		throw new DAOException(e.getMessage());
	} finally {
		session.close();
	}
}

@SuppressWarnings("unchecked")
@Override
public List<Usuario> list() {
	Session session = HibernateUtil.getSessionFactory().openSession();
	Transaction t = session.beginTransaction();
	try {
		List<Usuario> lista = session.createQuery("from Usuario").list();
		t.commit();
		return lista;
	} catch (Exception e) {
		throw new DAOException(e.getMessage());
	} finally {
		session.close();
	}
}

@Override
public void remove(Usuario usuario) {
	Session session = HibernateUtil.getSessionFactory().openSession();
	Transaction t = session.beginTransaction();
	try {
		session.delete(usuario);
		t.commit();
	} catch (Exception e) {
		throw new DAOException(e.getMessage());
	} finally {
		session.close();
	}
}

@Override
public void update(Usuario usuario) {
	Session session = HibernateUtil.getSessionFactory().openSession();
	Transaction t = session.beginTransaction();
	try {
		session.update(usuario);
		t.commit();
	} catch (Exception e) {
		throw new DAOException(e.getMessage());
	} finally {
		session.close();
	}
}

}
[/code]

web.xml

[code]

<?xml version="1.0" encoding="UTF-8"?>


WebEstagio

index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
login.jsf


Faces Servlet
javax.faces.webapp.FacesServlet
1


Faces Servlet
*.jsf


State saving method: ‘client’ or ‘server’ (=default). See JSF Specification 2.5.2
javax.faces.STATE_SAVING_METHOD
client


javax.servlet.jsp.jstl.fmt.localizationContext
resources.application

<context-param>
	<param-name>primefaces.THEME</param-name>
	<param-value>le-frog</param-value>
	<!-- bluesky 	le-frog 	south-street -->
</context-param>
<listener>
	<listener-class>com.sun.faces.config.ConfigureListener</listener-class>
</listener>

[/code]

	<managed-bean>
		<managed-bean-name>usuarioController</managed-bean-name>
		<managed-bean-class>br.unemat.bbg.controller.UsuarioController</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>