JSF2中的绑定无法正常工作

时间:2018-07-03 14:57:26

标签: java jsf-2 xhtml cdi

我在使用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;
    }

}

0 个答案:

没有答案