Problema con acentos al recargar forma en JSF

publicado por: Anonymous

tengo una aplicación que baja un archivo con el componente filedownload de primefaces, tuve algunos problemas pero se solucionaron con ayuda aquí, ahora tengo otro problema, el botón de Descarga esta junto con un formulario de Edición, cuando se carga la pagina, se cargan bien los campos, al descargar el archivo, esto hace que se actualice la pagina y los campos, pero al hacer esto, me manda un mensaje diciendo que el formato de algunos campos no es válido, Debugeando vi que al hacer el update de la forma, los campos que marca inválidos es porque llevan acentos y los está cargando con caracteres raros, pero la primera vez que se cargan salen bien los acentos.

Alguna idea que podría hacer?

Disculpen, acá el código, no tenía acceso a el hasta ahora, el problema es con la Descarga, al actualizar la forma, los campos que tienen información y que llevan acentos, cuando se actualiza, indica que no tienen el formato válido y los deja en blanco y al hacer Debug, veo que los trae con símbolos

Mi XHTML

_x000D_

_x000D_

<ui:composition xmlns="http://www.w3.org/1999/xhtml"_x000D_
	xmlns:h="http://java.sun.com/jsf/html"_x000D_
	xmlns:f="http://java.sun.com/jsf/core"_x000D_
	xmlns:ui="http://java.sun.com/jsf/facelets"_x000D_
	xmlns:p="http://primefaces.org/ui" template="/WEB-INF/template.xhtml">_x000D_
_x000D_
	<ui:define name="content">_x000D_
		<div class="ui-g">_x000D_
			<div class="ui-g-12">_x000D_
				<div class="card centerText">_x000D_
_x000D_
					<h:form id="formaUpdate" enctype="multipart/form-data">_x000D_
					<p:growl id="growl" showDetail="true" sticky="true" />_x000D_
					<h1>ACTUALIZAR RESGUARDO</h1>_x000D_
					_x000D_
					<input type="hidden" name="nombreUserLog" id="nombreUserLog" value="#{loginMB.nombre}" />_x000D_
					_x000D_
					<h:inputHidden id="idResguardo" value="#{resguardoMB.idResguardo}"/>_x000D_
					<h:inputHidden id="rutaFormato" value="#{resguardoMB.rutaFormato}"/>_x000D_
					<h:inputHidden id="nombreUserLogEdit" value="#{loginMB.nombre}"/>_x000D_
					_x000D_
					<p:panel header="Información del Equipo y Asignación">_x000D_
					<p:panelGrid columns="4" layout="grid" style="width: 100%" cellpadding="5" styleClass="alignLeft">_x000D_
					_x000D_
						<h:outputLabel for="tipoResguardo" value="Tipo de Resguardo * " />_x000D_
						<h:outputLabel for="numSerie" value="Número de Serie *" />_x000D_
						<h:outputLabel for="marcaComputadora" value="Marca de Computadora *" />_x000D_
						<h:outputLabel for="otraMarca" value="Otra Marca" />_x000D_
												_x000D_
						<p:selectOneMenu id="tipoResguardo" value="#{resguardoMB.tipoResguardo}">_x000D_
							<f:selectItem itemLabel="#{resguardoMB.tipoResguardo}" itemValue=""/>_x000D_
							<f:selectItem itemLabel="Usuario" itemValue="Usuario"/>_x000D_
							<f:selectItem itemLabel="TI" itemValue="TI"/>_x000D_
						</p:selectOneMenu>_x000D_
						<p:inputText id="numSerie" required="true" value="#{resguardoMB.numSerie}"></p:inputText> _x000D_
						<p:selectOneMenu id="marcaComputadora" value="#{resguardoMB.marcaComputadora}">_x000D_
							<f:selectItem itemValue="#{resguardoMB.marcaComputadora}" itemLabel="#{resguardoMB.marcaComputadora}" />_x000D_
							<f:selectItems value="#{catcontenidoMB.catalogoMarcasComp}" var="marcas" itemValue="#{marcas.nombre}" itemLabel="#{marcas.descripcion}"/>_x000D_
						</p:selectOneMenu>_x000D_
						<p:inputText id="otraMarca" value="#{resguardoMB.otraMarca}"></p:inputText>_x000D_
												_x000D_
						<h:outputLabel for="sistemaOperativo" value="Sistema Operativo *" />_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						<h:outputLabel for="tipoComputadora" value="Tipo de Computadora *" />_x000D_
						<h:outputLabel for="modeloComp" value="Modelo de Computadora *" />_x000D_
												_x000D_
						<p:selectOneMenu id="sistemaOperativo" value="#{resguardoMB.sistemaOperativo}">_x000D_
							<f:selectItem itemValue="{resguardoMB.sistemaOperativo}" itemLabel="{resguardoMB.sistemaOperativo}" />_x000D_
							<f:selectItems value="#{catcontenidoMB.catalogoSistOp}" var="sist" itemValue="#{sist.nombre}" itemLabel="#{sist.descripcion}"/>_x000D_
						</p:selectOneMenu>_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						<p:selectOneMenu id="tipoComputadora" value="#{resguardoMB.tipoComputadora}">_x000D_
							<f:selectItem itemValue="#{resguardoMB.tipoComputadora}" itemLabel="#{resguardoMB.tipoComputadora}" />_x000D_
							<f:selectItems value="#{catcontenidoMB.catalogoTiposComp}" var="tipos" itemValue="#{tipos.nombre}" itemLabel="#{tipos.descripcion}"/>_x000D_
						</p:selectOneMenu>_x000D_
						<p:inputText id="modeloComp" required="true" value="#{resguardoMB.modeloComp}"></p:inputText>_x000D_
												_x000D_
						<h:outputLabel for="memoriaRam" value="Memoria RAM *" />_x000D_
						<h:outputLabel for="valorCompra" value="Valor de Compra *" />_x000D_
						<h:outputLabel for="userAsign" value="Staff Asignado *" />_x000D_
						<h:outputLabel for="jefeUserAsign" value="Jefe Directo " />_x000D_
												_x000D_
						<p:inputText id="memoriaRam" required="true" value="#{resguardoMB.memoriaRam}"></p:inputText>_x000D_
						<p:inputText id="valorCompra" required="true" value="#{resguardoMB.valorCompra}"></p:inputText>_x000D_
						<p:selectOneMenu id="idUserAsign" value="#{resguardoMB.idUserAsign}">_x000D_
							<f:selectItem itemValue="#{0}" itemLabel="#{resguardoMB.userAsign}" />_x000D_
							<f:selectItems value="#{usersMB.usersList}" var="userasign" itemValue="#{userasign.id_users}" itemLabel="#{userasign.nombre}"/>_x000D_
						</p:selectOneMenu>_x000D_
						<p:selectOneMenu id="idJefeUserAsign" value="#{resguardoMB.idJefeUserAsign}">_x000D_
							<f:selectItem itemValue="#{0}" itemLabel="#{resguardoMB.jefeUserAsign}" />_x000D_
							<f:selectItems value="#{usersMB.usersList}" var="jefe" itemValue="#{jefe.id_users}" itemLabel="#{jefe.nombre}"/>_x000D_
						</p:selectOneMenu>_x000D_
						_x000D_
						<h:outputLabel for="ubicacionUserAsign" value="Ubicación " />_x000D_
						<h:outputLabel for="fechaAsignacion" value="Fecha de Asignación " />_x000D_
						<h:outputLabel for="motivoAsignacion" value="Motivo de Asignación *" />_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						_x000D_
						<p:selectOneMenu id="ubicacionUserAsign" value="#{resguardoMB.ubicacionUserAsign}" escape="false" >_x000D_
							<f:selectItem itemValue="#{resguardoMB.ubicacionUserAsign}" itemLabel="#{resguardoMB.ubicacionUserAsign}" />_x000D_
							<f:selectItems value="#{catcontenidoMB.catalogoUbicaciones}"_x000D_
								var="ubic" itemValue="#{ubic.nombre}"_x000D_
								itemLabel="#{ubic.descripcion}" />_x000D_
						</p:selectOneMenu>_x000D_
						<p:calendar id="fechaAsignacion" value="#{resguardoMB.fechaAsignacion}" pattern="dd-MM-yyyy" mask="true" />_x000D_
						<p:selectOneMenu id="motivoAsignacion" value="#{resguardoMB.motivoAsignacion}" >_x000D_
							<f:selectItem itemValue="#{resguardoMB.motivoAsignacion}" itemLabel="#{resguardoMB.motivoAsignacion}" />_x000D_
							<f:selectItems value="#{catcontenidoMB.catalogoMotivAsign}" var="motiv" itemValue="#{motiv.nombre}" itemLabel="#{motiv.descripcion}"/>_x000D_
						</p:selectOneMenu>_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						_x000D_
					</p:panelGrid>_x000D_
					</p:panel>_x000D_
					_x000D_
					<p:panel header="Adicionales">_x000D_
					<p:panelGrid columns="4" layout="grid" style="width: 100%" cellpadding="5" styleClass="alignLeft">_x000D_
											_x000D_
						<p:inputTextarea id="comentarios" rows="5" cols="30" value="#{resguardoMB.comentarios}" counter="contador" maxlength="150" counterTemplate="{0} caracteres restantes. " autoResize="false" />_x000D_
    					<p:commandButton value="ACTUALIZAR" action="#{resguardoMB.updateResguardo}" update="growl"></p:commandButton>_x000D_
    					<p:commandButton rendered="#{loginMB.resguardo_rol eq ('SUPERADMIN' or 'ADMIN')}" value="DESCARGAR ARCHIVO" actionListener="#{resguardoMB.descargarFormato}" onclick="PrimeFaces.monitorDownload(start, stop);" update="@form">_x000D_
						<p:fileDownload value="#{resguardoMB.archivoDescarga}" />_x000D_
					</p:commandButton>_x000D_
						<p:button value="INICIO" outcome="index"></p:button>_x000D_
    																	_x000D_
    					<h:outputText id="contador" /> _x000D_
    					<h:outputLabel></h:outputLabel>_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						<h:outputLabel></h:outputLabel>_x000D_
						_x000D_
					</p:panelGrid>_x000D_
    					<p:fileUpload id="archivoFormato" rendered="#{loginMB.resguardo_rol eq ('SUPERADMIN' or 'ADMIN')}" fileUploadListener="#{resguardoMB.handleFileUpload}" mode="advanced" update="growl" multiple="false"_x000D_
			                sizeLimit="1048576"_x000D_
			                allowTypes="/(.|/)(pdf)$/"_x000D_
			                uploadLabel="Cargar" cancelLabel="Cancelar" label="Buscar archivo"/>_x000D_
			            <h:outputLabel></h:outputLabel> _x000D_
					</p:panel>_x000D_
					</h:form>_x000D_
_x000D_
				</div>_x000D_
			</div>_x000D_
		</div>_x000D_
		_x000D_
		<script type="text/javascript">_x000D_
		function start() {_x000D_
		    PF('statusDialog').show();_x000D_
		}_x000D_
		 _x000D_
		function stop() {_x000D_
		    PF('statusDialog').hide();_x000D_
		}_x000D_
		</script>_x000D_
_x000D_
	</ui:define>_x000D_
_x000D_
</ui:composition>

_x000D_

_x000D_

_x000D_

Mi Managed Bean

public void descargarFormato() throws Exception {

    ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
    String rutaFormatoasign = ec.getRequestParameterMap().get("formaUpdate:rutaFormato");

    File origen = new File(rutaFormatoasign);
    String nombre = origen.getName();
    File destino = new File("C:/Program Files/Apache Software Foundation/Tomcat 8.0/webapps/ResguardosLat-1.0/resources/" + "archivoDescarga.pdf");

    try {
            InputStream in = new FileInputStream(origen);
            OutputStream out = new FileOutputStream(destino);

            byte[] buf = new byte[1024];
            int len;

            while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
            }

            in.close();
            out.close();
    } catch (IOException ioe){
            ioe.printStackTrace();
    }
    rutaFormato = rutaFormatoasign;
    InputStream stream = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/resources/" + "archivoDescarga.pdf");
    setArchivoDescarga(new DefaultStreamedContent(stream, "application/pdf", nombre));
}

Gracias a todos

solución

Ya quedó resuelto, por si alguien tiene el mismo problema, la raíz del mismo está en las llamadas Ajax, cuando se hace el refresh toma lo que está en el formulario, pero lo toma como input de HTML.

La solución es crear un Filtro para forzar el UTF en el request, en este post está la solución

https://zenidas.wordpress.com/recipes/avoid-encoding-problems-during-ajax-call-in-a-jsf-application/

Saludos

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *