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?
[code]/*
- 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;
}
}[/code]O formulário[code] <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>[/code]
[quote=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?
[code]/*
- 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;
}
}[/code]O formulário[code] <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>[/code][/quote]
Tente usar o escopo de View ao inves de Request
[]'s
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:[code]<?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>[/code]
Ja tentou colocar o dialog fora do form?
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)
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.
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.
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.
[quote=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.
[/quote]
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
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.
[quote=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.[/quote]
++
Já tive problemas com o dialog também, quando estava usando como um modal, achei esse appendToBody e só piorou…
[]'s