我在使用JSF绑定时遇到麻烦。当我按下“ Salvar”按钮时,字段motivoDoBloqueio(p:inputTextarea)和codTipoBloqueio(h:selectOneRadio)没有在bean中绑定,我无法在bean中获得这些字段值。我找不到问题。
这是我的代码:
Index.xhtml
<?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">
<h:head>
<title>Bloqueio de Cobrança</title>
<!-- <f:metadata> -->
<!-- <f:event type="preRenderView" -->
<!-- listener="#{excecaoDeCobrancaBean.pullValuesFromFlash}" /> -->
<!-- </f:metadata> -->
</h:head>
<h:body>
<f:metadata>
<f:viewParam name="idUsuario"
value="#{excecaoDeCobrancaBean.idUsuario}" />
<f:viewParam name="cpf" value="#{excecaoDeCobrancaBean.cpf}" />
<f:viewParam name="tipoCobranca"
value="#{excecaoDeCobrancaBean.tipoCobranca}" />
<f:event type="preRenderView"
listener="#{excecaoDeCobrancaBean.pullValuesFromFlash}" />
</f:metadata>
<h:form id="mainForm"
style=" padding-left: 150px; padding-right: 150px;">
<p:growl id="msgs" showDetail="true" autoUpdate="true"/>
<p:panel id="mainPanel" header="Exceção de cobrança"
style="margin-bottom:20px;">
<h4 style="margin-top: 5px; margim-bottom: 15px;">Realizar o
bloqueio de cobrança do cliente</h4>
<p:separator />
<h:panelGrid columns="2" cellpadding="10" width="100%">
<p:column width="50%">
<h5 style="margin-top: 0">Selecione o tipo de bloqueio:</h5>
<h:selectOneRadio layout="pageDirection" binding="#{codTipoBloqueio}" id="codTipoBloqueio" name="codTipoBloqueio"
style="font-weight: normal;"
value="#{excecaoDeCobrancaBean.codTipoBloqueio}">
<f:selectItem itemValue="1" itemLabel="Nenhum bloqueio" />
<f:selectItem itemValue="2"
itemLabel="Bloqueio apenas de Acionamento" />
<f:selectItem itemValue="3"
itemLabel="Bloqueio apenas de negativação" />
<f:selectItem itemValue="4"
itemLabel="Bloqueio apenas de ações eletrônicas" />
<f:selectItem itemValue="5" itemLabel="Bloqueio total" />
</h:selectOneRadio>
</p:column>
<p:column width="50%">
<h5 style="margin-top: 0">Motivo do bloqueio:</h5>
<p:inputTextarea rows="5" cols="50" counter="display"
maxlength="150" counterTemplate="{0} caracteres restantes."
value="#{excecaoDeCobrancaBean.excecaoDeCobrancaVO.motivoDoBloqueio}" />
<br />
<h:outputText id="display" style="font-size: small;" />
</p:column>
</h:panelGrid>
<h:panelGroup rendered="#{!excecaoDeCobrancaBean.isPost}">
<p:separator />
<div>
<p style="font-weight: bold">Última alteração:</p>
</div>
<div>
<p style="font-weight: bold">
Login:
<h:outputText
value="#{excecaoDeCobrancaBean.excecaoDeCobrancaVO.usuarioInclusao}"></h:outputText>
</p>
<p style="font-weight: bold">
Data:
<h:outputText
value="#{excecaoDeCobrancaBean.excecaoDeCobrancaVO.dataTipoOperacaoInformacao}"></h:outputText>
</p>
</div>
<div>
<p style="font-weight: bold">
Tipo do bloqueio:
<h:outputText
value="#{excecaoDeCobrancaBean.excecaoDeCobrancaVO.tipoBloqueioCobranca}"></h:outputText>
</p>
</div>
<div>
<p style="font-weight: bold">
Motivo do bloqueio:
<h:outputLabel
value="#{excecaoDeCobrancaBean.excecaoDeCobrancaVO.motivoDoBloqueioAnterior}"></h:outputLabel>
</p>
</div>
</h:panelGroup>
<p:separator />
<h:panelGrid columns="2" cellpadding="10" width="100%">
<p:column width="50%">
<h:panelGrid style="float: right">
<p:row>
<p:column>
<p:commandButton id="btnSalvar" update="mainForm" value="Salvar"
actionListener="#{excecaoDeCobrancaBean.salvar}" ajax="true">
<p:confirm header="Confirmação"
message="Deseja salvar a exceção de cobrança?"
icon="ui-icon-alert" />
</p:commandButton>
<p:confirmDialog global="true" showEffect="fade"
hideEffect="fade">
<p:commandButton value="Sim" type="button"
styleClass="ui-confirmdialog-yes" icon="ui-icon-check" />
<p:commandButton value="Não" type="button"
styleClass="ui-confirmdialog-no" icon="ui-icon-close" />
</p:confirmDialog>
</p:column>
</p:row>
</h:panelGrid>
</p:column>
<p:column width="50%">
<p:commandButton oncomplete="javascript:window.close();"
value="Fechar" />
</p:column>
</h:panelGrid>
</p:panel>
</h:form>
</h:body>
</html>
这是我的豆子:
ExcecaoDeCobrancaBean
import java.io.Serializable;
import java.util.Date;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.faces.context.Flash;
import javax.faces.event.ComponentSystemEvent;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
/**
* Object Class que representa um ExcecaoDeCobrancaController.
*/
@Named("excecaoDeCobrancaBean")
@ViewScoped
public class ExcecaoDeCobrancaBean implements Serializable {
private static final long serialVersionUID = 1L;
/** Constante log. */
private static final Logger LOG = Logger.getLogger(ExcecaoDeCobrancaBean.class);
/** Variável cobrancaService */
@Inject
private CobrancaService cobrancaService;
/** Variável excecaoDeCobrancaVO */
private ExcecaoDeCobrancaVO excecaoDeCobrancaVO;
/** Variável jsfUtil */
@Inject
private JsfUtil jsfUtil;
private String idUsuario;
private String cpf;
private Integer tipoCobranca;
private Integer codTipoBloqueio;
private boolean isPost;
/**
* Método para obter os parâmetros passados na URL
*/
@PostConstruct
public void init() {
LOG.info("Obtendo os parâmetros passados na URL.");
this.idUsuario = this.jsfUtil.getAtributo("idUsuario");
this.cpf = this.jsfUtil.getAtributo("cpf");
if (this.jsfUtil.getAtributo("tipoCobranca") != null) {
this.tipoCobranca = Integer.parseInt(this.jsfUtil.getAtributo("tipoCobranca"));
}
this.codTipoBloqueio = 1;
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
if (flash.get("idUsuario") == null) {
flash.put("idUsuario", this.idUsuario);
flash.put("cpf", this.cpf);
flash.put("tipoCobranca", this.tipoCobranca);
flash.put("isPost", this.isPost);
}
obterInformacoesDeAlteracao();
}
/**
* Obter os valores do Flash
*
* @param e
*/
public void pullValuesFromFlash(ComponentSystemEvent e) {
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
this.idUsuario = (String) flash.get("idUsuario");
this.cpf = (String) flash.get("cpf");
if (flash.get("tipoCobranca") != null) {
this.tipoCobranca = (Integer) flash.get("tipoCobranca");
}
if (flash.get("isPost") != null) {
this.isPost = (Boolean) flash.get("isPost");
}
}
/**
* Método utilizado para enviar os dados preenchidos na tela para o microservice
* de cobrança.
*/
public void salvar() {
LOG.info("Enviando os dados para o microservice de cobrança.");
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.setKeepMessages(true);
pullValuesFromFlash(null);
excecaoDeCobrancaVO.setCpf(this.cpf);
excecaoDeCobrancaVO.setTipoDeCobranca(this.tipoCobranca);
excecaoDeCobrancaVO.setUsuarioInclusao(this.idUsuario);
excecaoDeCobrancaVO.setTipoBloqueioCobranca(codTipoBloqueio);
flash.clear();
salvarMotivoDeInclusao();
}
/**
* Método utilizado para salvar o motívo de inclusão da exceção de cobrança.
*/
public void salvarMotivoDeInclusao() {
LOG.info("Construindo o DTO de cobrança.");
Long cpfCliente = Long.valueOf(excecaoDeCobrancaVO.getCpf());
Date dataTipoOperacaoInformacao = null;
CobrancaDTO cobrancaDTO = buildCobrancaDTO(cpfCliente, dataTipoOperacaoInformacao);
CobrancaDTO cobrancaDTORetorno = enviarInformacoesDeExcecaoDeCobranca(cpfCliente,
excecaoDeCobrancaVO.getTipoDeCobranca(), cobrancaDTO);
validarEExibirInformacaoParaUsuario(cobrancaDTORetorno);
}
/**
* Método utilizado para validar e exibir a mensagem de retorno para o usuário.
*
* @param cobrancaDTORetorno
*/
public void validarEExibirInformacaoParaUsuario(CobrancaDTO cobrancaDTORetorno) {
if (cobrancaDTORetorno != null && cobrancaDTORetorno.getUsuarioInclusao() != null) {
exibirAviso("Exceção lançada!");
} else {
exibirAviso("Não foi possível lançar a excecão de cobrança!");
}
}
/**
* Método utilizado para construir o DTO de cobrança.
*
* @param cpfCliente
* @param dataTipoOperacaoInformacao
* @return CobrancaDTO
*/
private CobrancaDTO buildCobrancaDTO(Long cpfCliente, Date dataTipoOperacaoInformacao) {
LOG.info("Construindo o DTO de cobrança.");
return cobrancaService.buildCobrancaDTO(cpfCliente, excecaoDeCobrancaVO.getTipoBloqueioCobranca(),
excecaoDeCobrancaVO.getMotivoDoBloqueio(), dataTipoOperacaoInformacao, tipoCobranca,
excecaoDeCobrancaVO.getUsuarioInclusao());
}
/**
* Método utilizado para enviar as informações de exceção de cobranca por put ou
* post.
*
* @param cpfCliente
* @param tipoCobranca
* @param cobrancaDTO
* @return
*/
public CobrancaDTO enviarInformacoesDeExcecaoDeCobranca(Long cpfCliente, Integer tipoCobranca,
CobrancaDTO cobrancaDTO) {
if (isPost) {
return postInformacoesDeCobranca(cpfCliente, tipoCobranca, cobrancaDTO);
}
return putInformacoesDeCobranca(cpfCliente, tipoCobranca, cobrancaDTO);
}
/**
* Método para executar o put das informações de cobrança.
*
* @param cpfCliente
* @param tipoCobranca
* @param cobrancaDTO
* @return
*/
private CobrancaDTO putInformacoesDeCobranca(Long cpfCliente, Integer tipoCobranca, CobrancaDTO cobrancaDTO) {
LOG.info("Enviando as informações de exceção de cobrança por put.");
return cobrancaService.executePut(cpfCliente, tipoCobranca, cobrancaDTO);
}
/**
* Método para executar o post das informações de cobrança.
*
* @param cpfCliente
* @param tipoCobranca
* @param cobrancaDTO
* @return
*/
public CobrancaDTO postInformacoesDeCobranca(Long cpfCliente, Integer tipoCobranca, CobrancaDTO cobrancaDTO) {
LOG.info("Enviando as informações de exceção de cobrança por post.");
return cobrancaService.executePost(cpfCliente, tipoCobranca, cobrancaDTO);
}
/**
* Método para obter as informações de alteração.
*/
public void obterInformacoesDeAlteracao() {
LOG.info("Obtendo as informações de alteração.");
if (this.cpf != null) {
Long cpfCliente = Long.valueOf(this.cpf);
CobrancaDTO cobrancaDTO = obterInformacoesIniciaisDoUsuario(cpfCliente, this.tipoCobranca);
popularVoComInformacoesInicias(cobrancaDTO);
} else {
this.excecaoDeCobrancaVO = new ExcecaoDeCobrancaVO();
}
}
/**
* Método para preencher os dados do VO da exceção de cobrança com as
* informações iniciais.
*
* @param cobrancaDTO
*/
private void popularVoComInformacoesInicias(CobrancaDTO cobrancaDTO) {
LOG.info("Populando o VO do exceção de cobrança com as informações iniciais.");
if (cobrancaDTO.getMotivoBloqueio() != null) {
this.excecaoDeCobrancaVO = popularVO(cobrancaDTO);
setIsPost(false);
} else {
this.excecaoDeCobrancaVO = new ExcecaoDeCobrancaVO();
setIsPost(true);
}
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.put("isPost", this.isPost);
}
/**
* Método para obter as informações iniciais do usuário
*
* @param cpf
* @param tipoCobranca
* @return CobrancaDTO
*/
private CobrancaDTO obterInformacoesIniciaisDoUsuario(Long cpf, Integer tipoCobranca) {
LOG.info("Obtendo as informações de bloqueio.");
return cobrancaService.obterInformacoesDeBloqueio(cpf, tipoCobranca);
}
/**
* Método para popular o VO de exceção de cobrança.
*
* @param cobrancaDTO
* @return ExcecaoDeCobrancaVO
*/
public ExcecaoDeCobrancaVO popularVO(CobrancaDTO cobrancaDTO) {
LOG.info("Populando o VO de exceção de cobrança.");
setIsPost(false);
return new ExcecaoDeCobrancaVO(cobrancaDTO.getTipoBloqueioCobranca(), cobrancaDTO.getUsuarioInclusao(),
cobrancaDTO.getDataTipoOperacaoInformacao(), null, cobrancaDTO.getMotivoBloqueio());
}
/**
* Método para exibir a mensagem de aviso para o usuário
*
* @param msg
*/
public void exibirAviso(String msg) {
LOG.info("Exibindo aviso para o usuário.");
this.jsfUtil.exibirMensagem(msg);
}
/**
* Métodos getters and setters
*/
public String getIdUsuario() {
return idUsuario;
}
public ExcecaoDeCobrancaVO getExcecaoDeCobrancaVO() {
return excecaoDeCobrancaVO;
}
public void setExcecaoDeCobrancaVO(ExcecaoDeCobrancaVO excecaoDeCobrancaVO) {
this.excecaoDeCobrancaVO = excecaoDeCobrancaVO;
}
public String getCpf() {
return cpf;
}
public Integer getTipoCobranca() {
return tipoCobranca;
}
public Integer getCodTipoBloqueio() {
return codTipoBloqueio;
}
public void setCodTipoBloqueio(Integer codTipoBloqueio) {
this.codTipoBloqueio = codTipoBloqueio;
}
public boolean isIsPost() {
return isPost;
}
public void setIsPost(boolean isPost) {
this.isPost = isPost;
}
public void setIdUsuario(String idUsuario) {
this.idUsuario = idUsuario;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setTipoCobranca(Integer tipoCobranca) {
this.tipoCobranca = tipoCobranca;
}
}