Fiz uma página na qual exibe os valores de uma tabela em uma datable. Até ai tudo ok.
Então adicionei dois botões, um para alterar e outro para excluir o registro.
Pensei então, no momento em que o usuário clicar no botão de alteração aparecer uma dialog modal, com os campos preenchidos.
Até ai não tive muito problema, fiz a dialog etc. Contudo ao tentar trazer o resultado do campo selecionado o inputtext fica vazio.
Relação de Formas de Pagamento
</h:head>
<h:body>
<p:fieldset legend=“Formas de Pagamento”>
<h:form>
<p:dataTable var=“formaPgto”
value="#{FormaPagamentoBean.formaPagamentoFacade.listAll()}">
<p:column headerText=“Descrição”>
<h:outputText value="#{formaPgto.descricao}" />
</p:column>
<p:column headerText=“Ações”>
<p:commandButton onclick=“dlgFormaPgto.show();” id=“btnAlterar”
icon=“ui-icon-disk” />
<p:commandButton
actionListener="#{FormaPagamentoBean.deleteFormaPagamento()}"
id=“btnExcluir” icon=“ui-icon-trash” />
</p:column>
</p:dataTable>
</h:form>
</p:fieldset>
<p:dialog id="modalDialog" header="Cadastro de Forma de Pagamento"
widgetVar="dlgFormaPgto" modal="true" height="100" minimizable="false"
resizable="false" dynamic="false">
<h:form>
<h:inputText value="#{FormaPagamentoBean.formaPagamento.descricao}" />
</h:form>
</p:dialog>
</h:body>
[/code]
Alguém saberia me dizer o que estou fazendo de errado?
E aproveitando, tenho outras duas dúvidas também.
1 - No caso do dialog, eu não posso fazer uma tela de cadastro em modal também e utilizar ela no momento em que vou fazer a alteração? Porque ter que ficar escrevendo a dialog sempre no final da page é meio estranho.
2 - Qual a propriedade para não permitir que a dialog seja movimentada?
Ahhh maravilha.
Esqueci de olhar seu projeto antes de postar aqui (Desculpe )
Lá já ta tudo respondido, só não tem a questão de deixar o dialog fixo na tela, mas esse eu já achei aqui.
É a propriedade draggable só deixar ela false
Relação de Formas de Pagamento
</h:head>
<h:body>
<p:fieldset legend=“Formas de Pagamento”>
<p:dataTable id=“FormaPagamentoTable”
value="#{FormaPagamentoBean.allFormaPagamento}" var=“formaPgto”
emptyMessage=“Nenhum registro encontrado!”>
<p:column headerText=“Descrição”>
<h:outputText value="#{formaPgto.descricao}" />
</p:column>
Quando clico no botão alterar ele abre normalmente a dialog, contudo o campo descrição está em branco.
Nenhum erro é retornado no console. Simplesmente não trás a informação.
Sabe o que pode ser??
Agradeço desde já pela ajuda!!
Boa noite Zenity, para resolver o seu problema é necessário criar um atributo no seu bean que receberá o objeto da linha selecionada, além disso, é preciso inicializar este atributo, pois sem isso não funcionará e você provavelmente verá alguns “NullPointerException” no console (experiência própria, rsrsrs). Por fim, ao invés de chamar o dialog no onclick do botão, chame no oncomplete e adicione o atributo update no mesmo botão atualizando o form inteiro ou apenas o modal. Segue um pequeno exemplo:
Bean
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import br.com.exemplo.model.FormaPagamento;
@ManagedBean
@SessionScoped
public class FormaPagamentoBean {
private List<FormaPagamento> listaFormasPagamento;
private FormaPagamento formaPagamentoSelecionada;
public FormaPagamentoBean() {
this.carregaListaFormasPagamento();
this.formaPagamentoSelecionada = new FormaPagamento();
}
private void carregaListaFormasPagamento() {
this.listaFormasPagamento = new ArrayList<FormaPagamento>();
for (int i = 0; i < 5; i++) {
this.listaFormasPagamento.add(new FormaPagamento("Forma " + i));
}
}
public void deleteFormaPagamento() {
// Implementação
}
public List<FormaPagamento> getListaFormasPagamento() {
return listaFormasPagamento;
}
public void setListaFormasPagamento(
List<FormaPagamento> listaFormasPagamento) {
this.listaFormasPagamento = listaFormasPagamento;
}
public FormaPagamento getFormaPagamentoSelecionada() {
return formaPagamentoSelecionada;
}
public void setFormaPagamentoSelecionada(
FormaPagamento formaPagamentoSelecionada) {
this.formaPagamentoSelecionada = formaPagamentoSelecionada;
}
}
@ViewScoped @ManagedBean (name = “FormaPagamentoBean”)
public class FormaPagamentoBean extends AbstractBean implements Serializable {
private static final long serialVersionUID = 7509177036726643287L;
private FormaPagamento formaPgto;
private List<FormaPagamento> formaPgtoLista;
private FormaPagamentoFacade formaPgtoFacade;
public FormaPagamentoFacade getFormaPagamentoFacade() {
if (formaPgtoFacade == null) {
formaPgtoFacade = new FormaPagamentoFacade();
}
return formaPgtoFacade;
}
public FormaPagamento getFormaPagamento() {
if (formaPgto == null) {
formaPgto = new FormaPagamento();
}
return formaPgto;
}
public void setFormaPagamento(FormaPagamento formaPgto) {
this.formaPgto = formaPgto;
}
public void createFormaPagamento() {
try {
getFormaPagamentoFacade().createFormaPagamento(formaPgto);
closeDialog();
displayInfoMessageToUser("Registro criado com sucesso!");
loadFormaPagamento();
resetFormaPagamento();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public void updateFormaPagamento() {
try {
getFormaPagamentoFacade().updateFormaPagamento(formaPgto);
closeDialog();
displayInfoMessageToUser("Registro alterado com sucesso!");
loadFormaPagamento();
resetFormaPagamento();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public void deleteFormaPagamento() {
try {
getFormaPagamentoFacade().deleteFormaPagamento(formaPgto);
closeDialog();
displayInfoMessageToUser("Registro excluído com sucesso!");
loadFormaPagamento();
resetFormaPagamento();
} catch (Exception e) {
keepDialogOpen();
displayErrorMessageToUser("Ocorreu um erro na transação! Tente novamente.");
e.printStackTrace();
}
}
public List<FormaPagamento> getAllFormaPagamento() {
if (formaPgtoLista == null) {
loadFormaPagamento();
}
return formaPgtoLista;
}
private void loadFormaPagamento() {
formaPgtoLista = getFormaPagamentoFacade().listAll();
}
public void resetFormaPagamento() {
formaPgto = new FormaPagamento();
}
}[/code]
A unica diferença é que meu método chama setFormaPagamento.
Como eu disse antes, inicialize o atributo “formaPgto” no construtor do bean:
public FormaPagamentoBean() {
this.formaPgto = new FormaPagamento();
}
Outra coisa importante, é manter os métodos getters e setters conforme os padrões, tente modificá-los para tornar o desenvolvimento e o entendimento do seu código mais fácil:
public FormaPagamento getFormaPgto() {
return formaPgto;
}
public void setFormaPgto(FormaPagamento formaPgto) {
this.formaPgto = formaPgto;
}
public List<FormaPagamento> getFormaPgtoLista() {
return formaPgtoLista;
}
public void setFormaPgtoLista(List<FormaPagamento> formaPgtoLista) {
this.formaPgtoLista = formaPgtoLista;
}
Algumas dicas importantes quando se trabalha com jsf… os nomes dos beans geralmente começam com letra minúscula, se você tem um atributo chamado formaPgto, gere os métodos get e set de acordo com o padrão de nomenclatura, pois como você deve saber, o jsf recupera ou atribui valor a um atributo no bean através desses métodos. Fica a dica. Flws
Amigo, estou tentando aqui, mas tem uma coisa que fiquei com dúvida.
Por exemplo, você falou para eu inicializar o formaPgto da seguinte maneira:
public FormaPagamentoBean() {
this.formaPgto = new FormaPagamento();
}
Mas no caso, o lazy que eu fiz não resolveria esse problema?
[code] public FormaPagamento getFormaPagamento() {
if (formaPgto == null) {
formaPgto = new FormaPagamento();
}
return formaPgto;
}
[/code]
De qualquer forma, adicionei o construtor, e tentei iniciar novamente a página, e mesmo assim o problema persistiu.
Estou revisando tudo aqui, mas se souber algo mais que eu possa tentar.
Beleza amigo, refiz toda codificação do Front End e começou a funcionar.
Contudo surgiu um novo problema :roll: :lol:
Quando eu adiciono/alterou ou excluo um registro, o Dialog não fecha sozinho.
Estou usando a seguinte codificação no button do dialog que realiza o evento
Amigo, como seria o funcionamento desta tela? Em qual momento o dialog tem que aparecer? Eu não entendi direito a exibição do dialog na exclusão. Em relação a pergunta anterior, também funcionaria, porém tome cuidado com o nome do get;
public FormaPagamento getFormaPgto() {
if (formaPgto == null) {
formaPgto = new FormaPagamento();
}
return formaPgto;
}
Será exibida uma dialog com o valor do registro da datatable preenchida. Nessa dialog tem dois botões “Alterar” e “Cancelar”
Quando clica em cancelar, eu limpo o objeto selecionado, quando ele clica em alterar, eu chamo o método update e “TEORICAMENTE” deveria fechar a dialog.
Contudo não está fazendo isso.
Ele até atualiza o registro, mas não fecha a dialog.
O código do meu botão “Alterar” da dialog está da seguinte maneira:
Outra coisa que percebi, o foco não cai no objeto da dialog.
Procurei um pouco no google e descobri que o p:focus serve para definir o foco em um determinado objeto.
Então adicionei a seguinte codificação em meu dialog.