我是初学java开发人员,我正在尝试在我已经在Hibernate 5上的项目上运行PrimeFaces 5.2上的基本CRUD。该表显示正常,但模态对话框未显示何时我点击任何按钮。我在网上尝试了很多东西,但一切似乎都没问题,所以我真的卡住了。
我真的很感激你可以解决这个问题。谢谢!
的index.html
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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:p="http://primefaces.org/ui">
<h:head>
<title>Gerenciador de Tarefas</title>
</h:head>
<h:body>
<p:layout fullPage="true">
<p:layoutUnit position="north" width="200" header="Atividades" resizable="true" closable="true" collapsible="true">
<h:form prependId="false">
<p:commandLink value="Nova Tarefa" actionListener="#{tarefaController.prepararAdicionarTarefa}" update="infosTarefa" oncomplete="dialogGerTarefa.show()"/>
</h:form>
</p:layoutUnit>
<p:layoutUnit position="center">
<h1>Gerenciador de Tarefas</h1>
<br/>
<h:form prependId="false">
<p:dataTable id="tabela" var="tarefa" value="#{tarefaController.listarTarefas}">
<p:column>
<f:facet name="header">
<h:outputText value="Título"/>
</f:facet>
<h:outputText value="#{tarefa.titulo}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Prazo de execução"/>
</f:facet>
<h:outputText value="#{tarefa.prazo_execucao}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Detalhes"/>
</f:facet>
<h:outputText value="#{tarefa.detalhes}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Responsável"/>
</f:facet>
<h:outputText value="#{tarefa.responsavel}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Urgente"/>
</f:facet>
<h:outputText value="#{tarefa.urgente}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Status"/>
</f:facet>
<h:outputText value="#{tarefa.status}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Data de conclusao"/>
</f:facet>
<h:outputText value="#{tarefa.data_conclusao}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Descricao da conclusao"/>
</f:facet>
<h:outputText value="#{tarefa.descricao_conclusao}"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Alterar"/>
</f:facet>
<p:commandButton actionListener="#{tarefaController.prepararAlterarTarefa}" ajax="false" value="Alterar" update="infosTarefa" oncomplete="dialogGerTarefa.show()"/>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Excluir"/>
</f:facet>
<h:commandLink action="#{tarefaController.excluirTarefa}" value="Excluir"/>
</p:column>
</p:dataTable>
</h:form>
</p:layoutUnit>
</p:layout>
<p:dialog header="Gerencia de Tarefa" widgetVar="dialogGerTarefa" resizable="false" modal="true" width="500">
<h:form prependId="false">
<h:panelGrid id="infosTarefa" columns="2" style="margin-bottom:10px">
<h:outputLabel for="titulo" value="Título:" />
<h:inputText id="titulo" value="#{tarefaController.tarefa.titulo}"/>
<h:outputLabel for="prazo_execucao" value="Prazo de execução:" />
<h:inputText id="prazo_execucao" value="#{tarefaController.tarefa.prazo_execucao}"/>
<h:outputLabel for="detalhes" value="Detalhes:" />
<h:inputText id="detalhes" value="#{tarefaController.tarefa.detalhes}"/>
<h:outputLabel for="responsavel" value="Responsavel:" />
<h:inputText id="responsavel" value="#{tarefaController.tarefa.responsavel}"/>
<h:outputLabel for="urgente" value="Urgente:" />
<h:selectOneMenu id="urgente" value="#{tarefaController.tarefa.urgente}">
<f:selectItem itemLabel="nao" itemValue="0"/>
<f:selectItem itemLabel="sim" itemValue="1"/>
</h:selectOneMenu>
<h:outputLabel for="status" value="Status:" />
<h:inputText id="status" value="#{tarefaController.tarefa.status}"/>
<h:outputLabel for="data_conclusao" value="Data de conclusao:" />
<h:inputText id="data_conclusao" value="#{tarefaController.tarefa.data_conclusao}"/>
<h:outputLabel for="descricao_conclusao" value="Descricao da conclusao:" />
<h:inputText id="descricao_conclusao" value="#{tarefaController.tarefa.descricao_conclusao}"/>
<p:commandButton update="tabela" oncomplete="dialogGerTarefa.hide();" actionListener="#{tarefaController.adicionarTarefa}" value="Inserir Tarefa"/>
<p:commandButton update="tabela" oncomplete="dialogGerTarefa.hide();" actionListener="#{tarefaController.alterarTarefa}" value="Alterar Tarefa"/>
</h:panelGrid>
</h:form>
</p:dialog>
</h:body>
tarefaController.java
package br.com.listadetarefas.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.com.listadetarefas.jpa.TarefaDao;
import br.com.listadetarefas.model.Tarefa;
@ManagedBean
@SessionScoped
public class TarefaController {
private Tarefa tarefa;
private DataModel listaTarefas;
public DataModel getListarTarefas() {
List<Tarefa> lista = TarefaDao.listaTarefasComFiltro("Todas");
listaTarefas = new ListDataModel(lista);
return listaTarefas;
}
public Tarefa getTarefa() {
return tarefa;
}
public void setTarefa(Tarefa tarefa) {
this.tarefa = tarefa;
}
public void prepararAdicionarTarefa(ActionEvent actionEvent) {
tarefa = new Tarefa();
}
public void prepararAlterarTarefa(ActionEvent actionEvent) {
tarefa = (Tarefa) (listaTarefas.getRowData());
}
public String excluirTarefa() {
Tarefa tarefaTemp = (Tarefa) (listaTarefas.getRowData());
TarefaDao.remove(tarefaTemp.getId());
return "index";
}
public void adicionarTarefa(ActionEvent actionEvent) {
TarefaDao.adiciona(tarefa);
}
public void alterarTarefa(ActionEvent actionEvent) {
TarefaDao.resolve(tarefa);
}
}
tarefa.java
package br.com.listadetarefas.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Tarefa {
@Id
@GeneratedValue
private int id;
private String titulo;
private String prazo_execucao;
private String detalhes;
private String responsavel;
private boolean urgente;
private String status;
private String data_conclusao;
private String descricao_conclusao;
public Tarefa() {
this.status = "aberta";
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getPrazo_execucao() {
return prazo_execucao;
}
public void setPrazo_execucao(String prazo_execucao) {
this.prazo_execucao = prazo_execucao;
}
public String getDetalhes() {
return detalhes;
}
public void setDetalhes(String detalhes) {
this.detalhes = detalhes;
}
public String getResponsavel() {
return responsavel;
}
public void setResponsavel(String responsavel) {
this.responsavel = responsavel;
}
public boolean isUrgente() {
return urgente;
}
public void setUrgente(boolean urgente) {
this.urgente = urgente;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getData_conclusao() {
return data_conclusao;
}
public void setData_conclusao(String data_conclusao) {
this.data_conclusao = data_conclusao;
}
public String getDescricao_conclusao() {
return descricao_conclusao;
}
public void setDescricao_conclusao(String descricao_conclusao) {
this.descricao_conclusao = descricao_conclusao;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
答案 0 :(得分:1)
我认为我在commandButton上的主要问题是ajax="false"
。删除它。当您执行完整请求时(仅使用ajax),没有oncomplete
- 回调。
同时将dialogGerTarefa.show()
替换为PF('dialogGerTarefa').show()
(类似于hide())。第一个是旧语法。
此外,我还会删除prependId="false"
。 More reading。您必须在对话框中为表单指定一个固定ID,并使用例如update=":dialogformid:infosTarefa"
进行更新(您可能只需执行update=":dialogformid"
)。