java - p :inputText in p:dialog return empty values to bean

标签 java primefaces

我正在尝试从 p:dialog 内的 p:inputText 获取值,但这会向我的 bean 返回 null。 inputText motivoCancelamento 需要填充对话框内我的 inputText motivoCancelamentoDialog 的内容。 其他的都可以,比如 status、protocoloCancelamento 和 dataCancelamento。 谁能帮我吗?

<h:form id="form">
            <p:toolbar>
                <f:facet name="left">
                    <p:growl id="messages" showDetail="true"/>                          
                    <p:dialog header="Cancelar Nota" widgetVar="cancelamentoDialog" focus="motivoCancelamentoDialog">
                        <h:panelGrid columns="2" cellpadding="5">
                            <h:outputLabel for="motivoCancelamentoDialog" value="Motivo Cancelamento:" />
                            <p:inputText id="motivoCancelamentoDialog" value="#{notaProdutoBean.notaProduto.motivoCancelamento}" />
                            <p:commandButton value="Cancelar" actionListener="#{notaProdutoBean.cancelarNota()}" update="status motivoCancelamento protocoloCancelamento dataCancelamento messages form"/>
                        </h:panelGrid>   
                    </p:dialog>
                    <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:toolbar>                
            <p:fieldset id='panelNotaFiscal' legend="NotaFiscal" >
                <p:panelGrid columns="6" columnClasses="centered">
                    <p:outputLabel for='status' value='Status'/>
                    <p:inputText id="status" value="#{notaProdutoBean.notaProduto.status}" required="true" requiredMessage="O campo Status é obrigatório">              
                        <p:message for="status"/>
                    </p:inputText>
                    <p:outputLabel for="motivoCancelamento" value="Motivo Cancelamento"/>
                    <p:inputText id="motivoCancelamento" size="25" value="#{notaProdutoBean.notaProduto.motivoCancelamento}">
                        <p:message for="motivoCancelamento"/>
                    </p:inputText>
                    <p:outputLabel for="protocoloCancelamento" value="Protocolo Cancelamento"/>
                    <p:inputText id="protocoloCancelamento" size="15" value="#{notaProdutoBean.notaProduto.protocoloCancelamento}">
                        <p:message for="protocoloCancelamento"/>
                    </p:inputText>
                    <p:outputLabel for="dataCancelamento" value="Data Cancelamento"/>
                    <p:calendar id="dataCancelamento" value="#{notaProdutoBean.notaProduto.dataCancelamento}" pattern="dd/MM/yyyy HH:mm:ss">
                        <p:message for='dataCancelamento'/>
                    </p:calendar>                       
                </p:panelGrid>
            </p:fieldset>

public void cancelarNota(){
    try{
        if(getNotaProduto().getStatus().equals("Autorizada")){
            getNotaProduto().setStatus("Cancelada");
            System.out.println("Motivo " + getNotaProduto().getMotivoCancelamento());
            getNotaProduto().setProtocoloCancelamento("22222222222222");
            getNotaProduto().setDataCancelamento(new Date());
            new BaseBean().salvar(getNotaProduto());
            RequestContext.getCurrentInstance().execute("PF('cancelamentoDialog').hide();");
        }
        else{
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO ,"Mensagem: ", "A nota não está autorizada portanto não pode ser cancelada"));
        }
    }
    catch(Exception e){

        new Log().salvaErroLog(e);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR ,"Mensagem: ", "Um erro ocorreu, entre em conto com o adminstrador"));
    }
}

最佳答案

您在同一表单中的同一字段有 2 个输入:

<p:inputText id="motivoCancelamentoDialog" value="#{notaProdutoBean.notaProduto.motivoCancelamento}" />

<p:inputText id="motivoCancelamento" size="25" value="#{notaProdutoBean.notaProduto.motivoCancelamento}">
                        <p:message for="motivoCancelamento"/>
                    </p:inputText>

您应该将对话框放在单独的表单中,这样它就不会发布第二个输入。

您还可以在“取消”按钮中指定要处理的元素

<p:inputText id="motivoCancelamentoDialog" value="# notaProdutoBean.notaProduto.motivoCancelamento}" />
<p:commandButton value="Cancelar" actionListener="#{notaProdutoBean.cancelarNota()}" update="status motivoCancelamento protocoloCancelamento dataCancelamento messages form" process="@this, motivoCancelamentoDialog"/>

关于java - p :inputText in p:dialog return empty values to bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49980821/

相关文章:

java - 运行 jasmin 汇编器来获取 .class 文件并将其转换为 java

java - Spring MessageSource 基本名称路径问题

primefaces - 无法在 PrimeFaces 5 中直接调用 widgetVar

java - 更新jsf数据表中的选定行

image - 如何显示 p :selectManyCheckbox 中带有图像的项目

java - Primefaces - 如何获取 CellEditEvent 的列

jsf-2 - 下拉列表未显示在 primefaces 数据表列筛选框中

java - 在 JPanel 中添加一些 JPanel(一个在另一个下面)

java - 使用邻接矩阵进行深度优先搜索?

将 CSV 导入 Access 的 Java 代码