[RESOLVIDO] Retornar objeto + página bloqueada : Primefaces

10 respostas
Onimatsu

Boa tarde pessoal.
Estou tentando selecionar um objeto de uma linha para exibição só que sem sucesso. Além de não retornar nada ainda deixa a página toda cinza.
Pelo código alguém saberia me dizer o que fiz de errado?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.teste.dao;

import br.com.teste.conexao.ConnectionFactory;
import br.com.teste.modelo.Usuario;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author 18122012
 */
@ManagedBean(name = "usuarioDao")
@RequestScoped
public class UsuarioDao {

    private Connection connection;
    private Usuario selectedUser;

    public UsuarioDao() {
        this.connection = new ConnectionFactory().getConnection();
    }

    public UsuarioDao(Connection connection) {
        this.connection = connection;
    }

    public List<Usuario> getLista() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        try {
            PreparedStatement pstmt = this.connection.prepareStatement("select * from Usuario");
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setNome(rs.getString("nome"));
                usuario.setEmail(rs.getString("email"));
                usuarios.add(usuario);
            }
            return usuarios;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Usuario getSelectedUser() {
        return selectedUser;
    }
}
O formulário
<h:form id="form" prependId="false">
                        <p:dataTable id="dataTable" var="usuario" value="#{usuarioDao.lista}" paginator="true" rows="50" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15" resizableColumns="true" liveResize="true" draggableColumns="true">
                            <p:column sortBy="#{usuario.nome}" style="width: 100px" headerText="Group">
                                <h:outputText value="#{usuario.nome}"/>
                            </p:column>
                            <p:column sortBy="#{usuario.email}" headerText="Subgroup">
                                <h:outputText value="#{usuario.email}"/>
                            </p:column> 

                            <p:column style="width:40px">  
                                <p:commandButton id="selectButton" update=":form:display" oncomplete="carDialog.show()" icon="ui-icon-search" title="View">  
                                    <f:setPropertyActionListener value="#{usuario}" target="#{usuarioDao.selectedUser}" />  
                                </p:commandButton>  
                            </p:column> 

                        </p:dataTable> 

                        <p:dialog header="Car Detail" widgetVar="carDialog" resizable="false" id="carDlg"  
                                  showEffect="fade" hideEffect="explode" modal="true">  
                            <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  
                                <h:outputText value="Group:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.nome}" style="font-weight:bold"/>  
                                <h:outputText value="Subgroup:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.email}" style="font-weight:bold"/>  
                            </h:panelGrid> 
                        </p:dialog> 

                    </h:form>

10 Respostas

leonhard32
Onimatsu:
Boa tarde pessoal. Estou tentando selecionar um objeto de uma linha para exibição só que sem sucesso. Além de não retornar nada ainda deixa a página toda cinza. Pelo código alguém saberia me dizer o que fiz de errado?
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.teste.dao;

import br.com.teste.conexao.ConnectionFactory;
import br.com.teste.modelo.Usuario;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

/**
 *
 * @author 18122012
 */
@ManagedBean(name = "usuarioDao")
@RequestScoped
public class UsuarioDao {

    private Connection connection;
    private Usuario selectedUser;

    public UsuarioDao() {
        this.connection = new ConnectionFactory().getConnection();
    }

    public UsuarioDao(Connection connection) {
        this.connection = connection;
    }

    public List<Usuario> getLista() {
        List<Usuario> usuarios = new ArrayList<Usuario>();
        try {
            PreparedStatement pstmt = this.connection.prepareStatement("select * from Usuario");
            ResultSet rs = pstmt.executeQuery();
            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setNome(rs.getString("nome"));
                usuario.setEmail(rs.getString("email"));
                usuarios.add(usuario);
            }
            return usuarios;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Usuario getSelectedUser() {
        return selectedUser;
    }
}
O formulário
<h:form id="form" prependId="false">
                        <p:dataTable id="dataTable" var="usuario" value="#{usuarioDao.lista}" paginator="true" rows="50" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15" resizableColumns="true" liveResize="true" draggableColumns="true">
                            <p:column sortBy="#{usuario.nome}" style="width: 100px" headerText="Group">
                                <h:outputText value="#{usuario.nome}"/>
                            </p:column>
                            <p:column sortBy="#{usuario.email}" headerText="Subgroup">
                                <h:outputText value="#{usuario.email}"/>
                            </p:column> 

                            <p:column style="width:40px">  
                                <p:commandButton id="selectButton" update=":form:display" oncomplete="carDialog.show()" icon="ui-icon-search" title="View">  
                                    <f:setPropertyActionListener value="#{usuario}" target="#{usuarioDao.selectedUser}" />  
                                </p:commandButton>  
                            </p:column> 

                        </p:dataTable> 

                        <p:dialog header="Car Detail" widgetVar="carDialog" resizable="false" id="carDlg"  
                                  showEffect="fade" hideEffect="explode" modal="true">  
                            <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  
                                <h:outputText value="Group:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.nome}" style="font-weight:bold"/>  
                                <h:outputText value="Subgroup:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.email}" style="font-weight:bold"/>  
                            </h:panelGrid> 
                        </p:dialog> 

                    </h:form>

Tente usar o escopo de View ao inves de Request

[]'s

Onimatsu
Certo consegui resolver o problema do objeto nulo com um set, no entanto, a página ainda continua bloqueada depois que mudei para viewscoped. Talvez o problema esteja fora do formulário, segue abaixo o código completo da página:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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.org/ui">

    <f:view contentType="text/html">
        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>
                <title>PrimeFaces</title>
            </f:facet>
        </h:head>
        <h:body>
            <p:layout fullPage="true">
                <p:layoutUnit position="north" size="200" resizable="true" closable="true" collapsible="true">
                    Header
                    <h:form>
                        <p:menuButton value="Add">
                            <p:menuitem value="Entry"/>  
                            <p:menuitem value="Hierarchy"/>
                        </p:menuButton>
                        <p:button value="Edity"></p:button>
                        <p:button value="Move"></p:button>
                        <p:button value="Delete"></p:button>
                    </h:form>
                </p:layoutUnit>
                <p:layoutUnit position="south" size="100" closable="true" collapsible="true">
                    Footer
                </p:layoutUnit>
                <p:layoutUnit position="west" size="275" header="Left" collapsible="true">
                    <p:menu>
                        <p:submenu label="Resources">
                            <p:menuitem value="Demo" url="http://www.primefaces.org/showcase-labs/ui/home.jsf" />
                            <p:menuitem value="Documentation" url="http://www.primefaces.org/documentation.html" />
                            <p:menuitem value="Forum" url="http://forum.primefaces.org/" />
                            <p:menuitem value="Themes" url="http://www.primefaces.org/themes.html" />
                        </p:submenu>
                    </p:menu>
                </p:layoutUnit>
                <p:layoutUnit position="center">
                    <h:form id="form" prependId="false">
                        <p:dataTable id="dataTable" var="usuario" value="#{usuarioDao.lista}" paginator="true" rows="50" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" rowsPerPageTemplate="5,10,15" resizableColumns="true" liveResize="true" draggableColumns="true">
                            <p:column sortBy="#{usuario.nome}" style="width: 100px" headerText="Group">
                                <h:outputText value="#{usuario.nome}"/>
                            </p:column>
                            <p:column sortBy="#{usuario.email}" headerText="Subgroup">
                                <h:outputText value="#{usuario.email}"/>
                            </p:column> 

                            <p:column style="width:40px">  
                                <p:commandButton id="selectButton" update=":form:display" oncomplete="carDialog.show()" icon="ui-icon-search" title="View">  
                                    <f:setPropertyActionListener value="#{usuario}" target="#{usuarioDao.selectedUser}" />  
                                </p:commandButton>  
                            </p:column> 

                        </p:dataTable> 

                        <p:dialog header="Car Detail" widgetVar="carDialog" resizable="false" id="carDlg"  
                                  showEffect="fade" hideEffect="explode" modal="true">  
                            <h:panelGrid id="display" columns="2" cellpadding="4" style="margin:0 auto;">  
                                <h:outputText value="Group:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.nome}" style="font-weight:bold"/>  
                                <h:outputText value="Subgroup:" />  
                                <h:outputText value="#{usuarioDao.selectedUser.email}" style="font-weight:bold"/>  
                            </h:panelGrid> 
                        </p:dialog> 

                    </h:form>
                </p:layoutUnit>
            </p:layout>
        </h:body>
    </f:view>
</html>
leonhard32

Ja tentou colocar o dialog fora do form?

Roselito_Favero_da_S

Uma vez tive um problema assim e na verdade o dialog aparecia fora da tela (tinha que usar as barras de rolagem para achá-lo).

Agora eu uso uma função javascript para centralizar o dialog, toda vez que ele -e mostrado (onshow)

Onimatsu

Tentei colocar o dialog fora do form mas o problema persiste e o dialog não aparece fora da tela aparece bem no meio só que não é possível arrastar ou fechar.

Roselito_Favero_da_S

Já investigou se não é algum erro que não está mostrando no console? Coloca um <h:messages /> abaixo do <h:form> do dialog para ver se mostra algum erro.

Onimatsu

Depois de muita pesquisa descobri uma forma fácil de resolver o travamento, é só colocar appendToBody=“true” dentro do dialog fica aí a dica caso alguém passe pelo mesmo problema.
Agradeço a todos os colegas que ajudaram.

leonhard32

Onimatsu:
Depois de muita pesquisa descobri uma forma fácil de resolver o travamento, é só colocar appendToBody=“true” dentro do dialog fica aí a dica caso alguém passe pelo mesmo problema.
Agradeço a todos os colegas que ajudaram.

Só uma duvida, com o appendToBody, ele adiciona o dialog a cada click do botão, não?
Não vai dar pau isso ai? Se o cara clicar e fechar o dialog 10x…

[]'s

Roselito_Favero_da_S

Concordo com o leonhard32. Esse appendToBody=“true” ainda vai te dar dor de cabeça. Se não me engano, o problema é o p:layout do Primefaces. Ele não funciona muito bem quando temos diálogos modais, e outros componentes dinâmicos também.

Uma vez tentei implementar e tive tantos problemas que voltei para o velho ui:composite e pronto.

leonhard32

Roselito Fávero da Silva:
Concordo com o leonhard32. Esse appendToBody=“true” ainda vai te dar dor de cabeça. Se não me engano, o problema é o p:layout do Primefaces. Ele não funciona muito bem quando temos diálogos modais, e outros componentes dinâmicos também.

Uma vez tentei implementar e tive tantos problemas que voltei para o velho ui:composite e pronto.

++

Já tive problemas com o dialog também, quando estava usando como um modal, achei esse appendToBody e só piorou…

[]'s

Criado 30 de setembro de 2013
Ultima resposta 3 de out. de 2013
Respostas 10
Participantes 3