webmun
Abril 22, 2013, 3:21pm
#1
Estou tentando usar o componente do Prime (Dialog Framework basic) para exibir informações de um arquivo xhtml através de um commandButton, simulando uma janela modal. Porém ao clicar neste botão a tela não é exibida. Segue o código: (está bem parecido com o exemplo do show case do primefaces).
Formulário que irá chamar o outro xhtml de forma modal:
<p:outputLabel value="Nome do Curso: " styleClass="label"><br />
<p:inputText value="nomeDoCurso" styleClass="inputtext" size="100"/>
</p:outputLabel>
<p:commandButton icon="ui-icon-extlink" action="#{dialogBean.viewCursos}" />
DialogBean
@ManagedBean
@SessionScoped
public class DialogBean implements Serializable {
public String viewCursos() {
System.out.println("chegou aqui");
return "dialog:area";
}
public String viewCursosCustomized() {
System.out.println("chegou aqui");
return "dialog:viewCursos?modal=true";
}
}
O método é chamado pois é exibida a mensagem na console, mas o return dialog não funciona. Não é exibido erros.
O arquivo area.xhtml está somente com um texto simples, somente para teste. E está na raiz.
teria como vc postar todo o seu xhtml.
webmun
Abril 22, 2013, 4:52pm
#3
Segue o cursos.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
<link rel="stylesheet" type="text/css" href="css/padrao.css"/>
</h:head>
<ui:composition template="padrao.xhtml">
<ui:debug hotkey="K" />
<ui:define name="centro">
<p:toolbar id="tool_curso" >
<p:toolbarGroup align="left">
<p:commandButton icon="ui-icon-document" title="Novo"
style="width:25px;height: 25px" />
<p:commandButton icon="ui-icon-search" title="Localizar"
style="width:25px;height: 25px" />
<p:commandButton icon="ui-icon-pencil" title="Editar"
style="width:25px;height: 25px" />
<p:commandButton icon="ui-icon-cancel" title="Cancelar"
style="width:25px;height: 25px" />
<p:commandButton icon="ui-icon-disk" title="Salvar"
style="width:25px;height: 25px" />
<p:commandButton icon="ui-icon-trash" title="Excluir"
style="width:25px;height: 25px" />
</p:toolbarGroup>
</p:toolbar>
<h:form id="frm_curso_pg">
<p:tabView>
<p:tab title ="Curso">
<p:fieldset legend="Dados do Curso" id="fds_curso">
<p:outputLabel value ="Código: "><br />
<p:inputText value="codCurso" styleClass="inputtext" size="4" />
</p:outputLabel>
<p:outputLabel value="Nome do Curso: " styleClass="label"><br />
<p:inputText value="nomCurso" styleClass="inputtext" size="100"/>
</p:outputLabel>
<p:commandButton icon="ui-icon-extlink" action="#{dialogBean.area}" />
</p:fieldset>
</p:tab>
</p:tabView>
</h:form>
</ui:define>
</ui:composition>
</html>
area.xhtml (este é o arquivo que deve estar em forma de janela, só pra testes mesmo)
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h2>Áreas de Ensino</h2>
</html>
quando trabalho com dialog, vc declara o componente
<p:dialog id="id_dialogo" widgetVar="dialogo_necessario">
... conteúdo
</p:dialog>
a propriedade widgetVar é necessaria para executar a ação de visualização
feita pelo botão na propriedade oncomplete
<p:commandButtom value="Nome Apresentado" oncomplete="dialog_necessario.show()" type="button"/>
agora vi o componente q vc esta utilizando, nunca trabalhei com esse
desculpa
vc está usando o primefaces 4.0-snapshot ? e já trocou o javax.faces pra versão 2.1.20 ?
webmun
Abril 22, 2013, 5:34pm
#7
O prime é o 3.5 e javax está atualizado.
eu testei essa feature e o codigo que verifica o outcome (‘dialog:’) só está na versão 4.0-snapshot.
e o javax.faces tem q ser na versão 2.1.20 ou superior senão não funciona
webmun
Abril 25, 2013, 8:45pm
#9
É kdoigor, tentei colocar pra funcionar e realmente não deu certo. Tive que partir para utilizar o componente dialog mesmo Funcionou, mas esse outro componente parecia ser mais fácil e mais enxuto de utilizar. Como estou utilizando a versão 3.5 do prime, não terá como utilizá-lo.
Vlw pela ajuda!!!
Boa noite,
Estou com o mesmo problema!
Esta jar 4.0-snapshot, aonde consigo baixar.
webmun
Maio 13, 2013, 6:01pm
#11
adi_silva, procurei e também não consegui encontrar. O curioso é que no site do primefaces mostra no rodapé que foi desenvolvido nesta versão…
o meu sempre da erro de compatibilidade na hora de iniciar, quais são as libs necessárias para funcionar primefaces com snapshot?
Olá, coloque isso dentro do faces-config.xml
<application>
<action-listener>org.primefaces.application.DialogActionListener</action-listener>
<navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
<view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application>
fonte: http://forum.primefaces.org/viewtopic.php?f=3&t=31458
Ow mano você conseguiu resolver estou com o mesmo problema!
Pessoal, bom dia, estou com o mesmo problema. O link do amigo aí de cima já não abre mais. Estou usando o PrimeFaces 5.0, Apache Tomcat 6 e JDK 1.6.
Me ajudem por favor.
package controller;
import dao.ImovelDao;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import model.Imovel;
@ManagedBean @ViewScoped
public class ImovelBean implements Serializable {
private ImovelDao imovelDao;
private Imovel imovel = new Imovel();
private DataModel<Imovel> imoveis;
public void novo() {
imovel = new Imovel();
}
public String inserir() {
String resultado = "falha";
imovelDao = new ImovelDao();
boolean retorno = imovelDao.inserir(imovel);
if (retorno) {
resultado = "imoveis";
}
return resultado;
}
public void selecionar() {
imovel = imoveis.getRowData();
}
public String alterar() {
String resultado = "falha";
imovelDao = new ImovelDao();
boolean retorno = imovelDao.alterar(imovel);
if (retorno) {
resultado = "imoveis";
}
return resultado;
}
public String remover() {
String resultado = "falha";
imovelDao = new ImovelDao();
boolean retorno = imovelDao.remover(imovel);
if (retorno) {
resultado = "imoveis";
}
return resultado;
}
public DataModel<Imovel> consultar() {
imovelDao = new ImovelDao();
List<Imovel> imovelList = imovelDao.listar();
imoveis = new ListDataModel<Imovel>(imovelList);
return imoveis;
}
public Imovel getImovel() {
return imovel;
}
public void setImovel(Imovel imovel) {
this.imovel = imovel;
}
public DataModel<Imovel> getImoveis() {
imovelDao = new ImovelDao();
List<Imovel> imovelList = imovelDao.listar();
imoveis = new ListDataModel<Imovel>(imovelList);
return imoveis;
}
public void setImoveis(DataModel<Imovel> imoveis) {
this.imoveis = imoveis;
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Gerenciar Imóveis</title>
</h:head>
<h:body>
<div align="center">
<h:form id="formPrincipal">
<p:dataTable id="tabelaImoveis" value="#{imovelBean.imoveis}" var="lista" style="width:70%">
<f:facet name="header">Gerenciador de Imóveis</f:facet>
<p:column headerText="Matrícula">
<h:outputText value="#{lista.matriculaImovel}" />
</p:column>
<p:column headerText="Endereço">
<h:outputText value="#{lista.enderecoImovel}" />
</p:column>
<p:column headerText="Valor do Imóvel">
<h:outputText value="#{lista.valorImovel}">
<f:convertNumber type="currency" locale="pt_BR" />
</h:outputText>
</p:column>
<p:column headerText="Ações">
<p:commandButton value="Alterar" update=":formAlterar:Alterar"
onclick="Alterar.show();">
</p:commandButton>
<p:commandButton value="Excluir" update=":formExcluir:Excluir"
oncomplete="confirmation.show()">
<f:setPropertyActionListener target="#{imovelBean.selecionar.imovel}"
value="#{lista}" />
</p:commandButton>
</p:column>
</p:dataTable>
<p:commandButton value="Cadastrar" id="cadastrar"
oncomplete="dialogCadastrar.show()" />
</h:form>
</div>
<h:form id="formAlterar">
<p:dialog header="Alterar Registro" widgetVar="dialogAlterar" modal="true" id="Alterar">
<p:panelGrid id="panelAlterar" columns="2">
<h:outputText value="Matrícula" />
<p:inputText value="#{imovelBean.imovel.matriculaImovel}" />
<h:outputText value="Endereço:" />
<p:inputText value="#{imovelBean.imovel.enderecoImovel}" />
<h:outputText value="Valor:" />
<p:inputText value="#{imovelBean.imovel.valorImovel}" />
</p:panelGrid>
<p:commandButton value="Alterar"
actionListener="#{imovelBean.alterar}"
update=":formPrincipal:tabelaImoveis"
oncomplete="dialogAlterar.hide()" />
</p:dialog>
</h:form>
<h:form id="formCadastrar">
<p:dialog header="Novo Cadastro" widgetVar="dialogCadastrar" modal="true">
<p:panelGrid columns="2">
<p:outputLabel value="Matrícula" />
<p:inputText size="8" value="#{imovelBean.imovel.matriculaImovel}" />
<p:outputLabel value="Endereço" />
<p:inputText size="60" value="#{imovelBean.imovel.enderecoImovel}" />
<p:outputLabel value="Valor" />
<p:inputText size="10" value="#{imovelBean.imovel.valorImovel}" />
<h:commandButton value="Cadastrar" action="#{imovelBean.inserir}" />
</p:panelGrid>
<p:commandButton value="Cadastrar" action="#{imovelBean.inserir}"
update=":formPrincipal:tabelaImoveis" oncomplete="dialogCadastrar.hide()" />
</p:dialog>
</h:form>
<h:form id="formExcluir">
<p:confirmDialog id="Excluir"
message="Confirma exclusão do imóvel de matrícula #{imovelBean.imovel.matriculaImovel}?"
header="Excluir" severity="alert" widgetVar="confirmation">
<p:commandButton id="confirm" value="Sim"
oncomplete="confirmation.hide()"
actionListener="#{imovelBean.excluir}"
update=":formPrincipal:tabelaImoveis" />
<p:commandButton id="decline" value="Não"
onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>
</h:body>
</html>
Tenta colocar isso no seu faces-config
<application>
<action-listener>org.primefaces.application.DialogActionListener</action-listener>
<navigation-handler>org.primefaces.application.DialogNavigationHandler</navigation-handler>
<view-handler>org.primefaces.application.DialogViewHandler</view-handler>
</application>