Inserir dado no banco usando inplace do PrimeFaces

Boa noite!

Não estou conseguindo fazer com que o dado selecionado usando o inplace seja persistido no banco…já tentei de tds as formas…
São duas combos de estados e cidades usando javascript e eu não sei como usar as duas coisas ao mesmo tempo… ;/

Se alguém puder me dar uma luz eu agradeço!

A combo de estados:


<td align="right"><h:outputText value="Estado"/></td>
                                        <td align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                              <p:inplace label="Clique duas vezes" effectSpeed="fast" event="dblclick">
                                                  <h:selectOneMenu id="estado" required="true" requiredMessage="Campo Estado é obrigatório" value="#{usuarioBeans.user.estado}">
                                                    <select id="estado" name="estado"></select> 
                                                </h:selectOneMenu>
                                            </p:inplace>
                                        </td>

Eu sei que está uma bagunça…tem duas combos…uma vazia e a outra popula com os estados…mas quando vou gravar é como se eu não tivesse escolhido nenhum valor pra ela. Eu queria que o <h:selectOneMenu recebesse e persistisse os valores…e eu preciso usar o inplace…

Obrigada :slight_smile:

Não consegui fazer com que o dado seja persistido ainda…desisti do JS mas mesmo assim continuo perdida…se alguém por favor puder me ajudar, eu gostaria de saber como fazer para que o item escolhido no <f:selectItem> da combo dos estados seja inserido no banco.

Eu dei um milhão de voltas e acho não cheguei a lugar nenhum na minha classe UsuarioBean.

A minha base é super simples. Declarei estado e cidade como um atributo de usuário e ambos são character varying. Existe apenas a tabela usuarios. Da combo de cidades está gravando. Segue o código:


package Beans;

import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.Id;
import javax.persistence.Query;
import modelo.Usuario;
import util.DAO;
import util.HibernateUtil;

@ManagedBean //gera os new
@SessionScoped
//@ViewScoped
public class UsuarioBeans {

    EntityManager manager = HibernateUtil.getManager();
    private Usuario user = new Usuario();
    private DAO dao = new DAO();
    //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    private TimeZone tz = TimeZone.getTimeZone("America/Sao_Paulo");
    @Id
    private Long id;
    List<Usuario> lista;
    private String nome;
    ArrayList<String> cidades;
    private String estados;
    private String estadoSelecionado = "";

    public String getEstados() {
        if (estadoSelecionado.equals("RS")) {
            estados = "Rio Grande do Sul";
        } else if (estadoSelecionado.equals("SC")) {
            estados = "Santa Catarina";
        } else if (estadoSelecionado.equals("PR")) {
            estados = "Paraná";
        } else if (estadoSelecionado.equals("SP")) {
            estados = "São Paulo";
        } else if (estadoSelecionado.equals("RJ")) {
            estados = "Rio de Janeiro";
        }
        return estados;
    }

    public void setEstados(String estados) {
        this.estados = estados;
    }

    public ArrayList<String> getCidades() {
        return cidades;
    }

    public void setCidades(ArrayList<String> cidades) {
        this.cidades = cidades;
    }

    public String getEstadoSelecionado() {
        return estadoSelecionado;
    }

    public void setEstadoSelecionado(String estadoSelecionado) {
        this.estadoSelecionado = estadoSelecionado;
        estadoSelecionado = user.getEstado();
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public TimeZone getTz() {
        return tz;
    }

    public void setTz(TimeZone tz) {
        this.tz = tz;
    }

    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }

    public void setId(Long id) {
        this.id = id;
        if (id != null) {
            user = manager.find(Usuario.class, id);
        }
    }

    public Long getId() {
        return id;
    }

    public void newInstance() {
        user = new Usuario();
    }

    public void inserirUsuario() {
        manager.getTransaction().begin();
        manager.persist(user);
        manager.getTransaction().commit();

        newInstance();
    }


    public void carregarCidades() {

        cidades = new ArrayList<String>();

        if (estadoSelecionado.equals("RS")) {
            cidades.add("Passo Fundo");
            cidades.add("Marau");
            cidades.add("Porto Alegre");
        } else if (estadoSelecionado.equals("SC")) {
            cidades.add("Florianópolis");
            cidades.add("Bombas");
            cidades.add("Blumenau");
        } else if (estadoSelecionado.equals("PR")) {
            cidades.add("Curitiba");
            cidades.add("Paranaguá");
            cidades.add("Cascavel");
        } else if (estadoSelecionado.equals("SP")) {
            cidades.add("São Paulo");
            cidades.add("Americana");
            cidades.add("Campinas");
        } else if (estadoSelecionado.equals("RJ")) {
            cidades.add("Rio de Janeiro");
            cidades.add("Angra dos Reis");
            cidades.add("Parati");
        }
    }
}

inserir.xhtml


  <td align="right"><h:outputText value="Estado"></h:outputText></td>
                                        <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                            <p:inplace label="Clique duas vezes" effectSpeed="fast" event="dblclick">
                                                <h:selectOneMenu value="#{usuarioBeans.estadoSelecionado}" valueChangeListener="#{usuarioBeans.user.estado}">
                                                    <f:selectItem itemValue="RS" itemLabel="Rio Grande do Sul"></f:selectItem>
                                                    <f:selectItem itemValue="SC" itemLabel="Santa Catarina" ></f:selectItem>
                                                    <f:selectItem itemValue="PR" itemLabel="Paraná"></f:selectItem>
                                                    <f:selectItem itemValue="SP" itemLabel="São Paulo"></f:selectItem>
                                                    <f:selectItem itemValue="RJ" itemLabel="Rio de Janeiro"></f:selectItem>
                                                    <f:ajax event="change" render="cidades" listener="#{usuarioBeans.carregarCidades}"/>
                                                </h:selectOneMenu>
                                            </p:inplace>
                                        </td>
                                    </tr>

                                    <tr>
                                        <td align="right"><h:outputText value="Cidades"></h:outputText></td>
                                        <td align="right">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                            <p:inplace label="Clique duas vezes" effectSpeed="fast" event="dblclick" >
                                                <h:selectOneMenu id="cidades" value="#{usuarioBeans.user.cidade}">
                                                    <f:selectItems value="#{usuarioBeans.cidades}" />
                                                </h:selectOneMenu>                                          
                                            </p:inplace>
                                        </td>

:wink:

Olá!

Não sei se será de muita ajuda mas acredito que se vc fizer algo com o ajax update pode funcionar.
No forum do primefaces eles disseram que seria a melhor forma (talvez a única http://forum.primefaces.org/viewtopic.php?f=3&t=6671)
Vou dar o exemplo do meu caso:

<p:inplace editor="true"
	   event="dblclick"
	   cancelLabel="cancelar"
	   saveLabel="salvar">
     <p:inputText value="#{current.name}" required="true"/>
     <p:ajax event="save" 
	listener="#{activityDetailBean.saveModifications}"
	update="causaBasicaAcaoControle"/>
</p:inplace>

no bean:

public void saveModifications() {
		Object object = JSFUtil.resolveEL(SGIConstants.CURRENT_VAR_COMPONENT);
		save(object);
	}

O seu save deveria por exemplo pegar os currentEstado e Cidade das comboboxes.

É só uma idéia :wink: