在Primefaces 5.0中下载文件后更新组件?

时间:2014-10-30 23:57:26

标签: java jsf-2 primefaces

Hello社区我有一个问题我需要在下载文件后更新表单组件,但是当commandButton运行条件时ajax =" false"不处理动作"更新",我希望我可以建议你如何做你提到的行动。

presupuesto.xhtml

<p:dialog id="dlgPresupuesto" widgetVar="dlgVarPresupuesto" closable="false"
    hideEffect="clip" showEffect="Bounce" header="#{msg['form.boton.guardar']}"
    modal="true" appendTo="@(body)" resizable="false">
    <h:form id="frmPresupuesto">
        <p:panel id="pnlPresupuesto">
            <fieldset class="fieldset-formulario">
                <h:panelGrid>
                    <p:outputLabel value="#{msg['msg.confirm.confirmacionGrabar']}"
                                   style="font-weight: bold;" />                                
                </h:panelGrid>
                <h:panelGrid columns="3">
                    <p:commandButton value="#{msg['form.boton.aceptar']}" ajax="false"
                                     actionListener="#{cRegistroPresupuesto.grabarPresupuesto}"
                                     onclick="PF('dlgVarPresupuesto').hide()"
                                     update=":frmPresupuesto, :listaMensajes"
                                     icon="ui-icon-disk">
                        <p:fileDownload value="#{cRegistroPresupuesto.file}" contentDisposition="attachment" />
                    </p:commandButton>
                    <p:spacer width="8" />  
                    <p:commandButton value="#{msg['form.boton.salir']}"
                                     oncomplete="PF('dlgVarPresupuesto').hide()"
                                     icon="ui-icon-circle-arrow-w"/>                                                                
                </h:panelGrid>
            </fieldset>
        </p:panel>
    </h:form>
</p:dialog>

CRegistroPresupuesto.java

@ManagedBean(name = "cRegistroPresupuesto")
@ViewScoped
public class CRegistroPresupuesto extends BaseController 
{   
    private static final long serialVersionUID = 1L;
    private static final Logger LOGGER = LoggerFactory.getLogger(CRegistroPresupuesto.class);

    @ManagedProperty(value = "#{iPresupuestoService}")
    private IPresupuestoService iPresupuestoService;    
    private PresupuestoBean presupuesto;
    private StreamedContent file;

    /**
     * Graba el presupuesto asociado.
     * @param event - Evento desencadenado en la interfaz de usuario.
     */
    public void grabarPresupuesto(ActionEvent event) 
    {
        try 
        {
            if(this.presupuesto.getSiCodPresupuesto() == Constantes.ZERO_SHORT) 
            {
                this.presupuesto.setSiAnio((short) DateUtil.getAnioActual());
                this.presupuesto.setTsFecSolicitada(Calendar.getInstance().getTime());                      
                this.presupuesto.setVrazSocial(getCliente(this.presupuesto.getIcodEmpresa()));
                this.presupuesto.setVrazSocial(getPersona(this.presupuesto.getIcodPersona()));
            }

            Short siCodPrespuesto = iPresupuestoService.grabarPresupuesto(this.presupuesto,
                                                                          this.listaCuadroCosto,
                                                                          getNombreHost(),
                                                                          getCVariableSesion().getIcodUsu());                               
            StringBuilder titulo = new StringBuilder();

            titulo.append(getMessage("presupuesto.form.presupuesto.nro"));
            titulo.append(String.format("%05d", siCodPrespuesto));
            titulo.append(Constantes.SEPARADOR);
            titulo.append(String.valueOf(this.presupuesto.getSiAnio()).substring(2));
            titulo.append(Constantes.EIG);              
            this.presupuesto.setvTitPresupuesto(titulo.toString());             
            addInfoMessage(null, getMessage("msg.info.grabadoOk"));

            InputStream stream = new FileInputStream("C:\\reporte\\ReportePresupuesto.xls");

            file = new DefaultStreamedContent(stream, "application/xls", "ReportePresupuesto.xls");

            RequestContext.getCurrentInstance().update(":frmRegistro");   
        } 
        catch (Exception e) 
        {
            LOGGER.error(getGenerarError(
                    Thread.currentThread().getStackTrace()[1].getMethodName(),
                    Constantes.NIVEL_APP_CONSTROLLER,
                    this.getClass().getName(), e.getMessage()));
        }
    }       
    // get and set
}

0 个答案:

没有答案