Problema com JSF 2.0, RichFaces 4 , popup e upload

Java

09/07/2012

Olá,
Seguinte: estou fazendo uma página em JSF 2.0 basicamente assim: após uma seleção em um combo no topo da página, abrem-se três pares de RadioButton, cada par dando opção de edição de um campo diferente, via texto (rich:editor , do RichFaces 4) ou via upload de arquivo (descendente de javax.faces.component.html.HtmlInputText , HtmlInputFile , implementado aqui). A opção clicada abre um popup (rich:popupPanel). O detalhe é que o popup de upload, além de simplesmente não efetuar o upload (ele o faz em outras páginas do sistema), faz um reload de toda a página após o clic em upload (esse efeito é presente em todas as outras páginas antes implementadas), e esse reload faz todo o conteúdo da página se perder, inclusive a seleção do combo inicial - o que não é desejado, a página deveria permanecer como está, apenas com o acréscimo do arquivo (ou texto) inserido. Ah, e o texto novo q digito nesses editores simplesmente não é salvo - após o comando salvar os textos permanecem os carregados na seleção do combo.
Atenciosamente,
Fabio
Fabio Zimmermann

Fabio Zimmermann

Curtidas 0

Respostas

Davi Costa

Davi Costa

09/07/2012

Posta pelo menos os fontes da tua página vai ficar mais fácil p comunidade te ajudar

att Davi
GOSTEI 0
Fabio Zimmermann

Fabio Zimmermann

09/07/2012

Ok, segue abaixo o código em questão:

		<rich:popupPanel modal=true id=unidadeArquivoMP autosized=true
				rendered=#{menuMB.perfilEdicao}>
			<f:facet name=header>
				<h:outputText value=#{bundle.uploadUnidade} />
			</f:facet>
			<f:facet name=controls>
				<h:graphicImage value=/resources/images/close.jpg
					onclick=#{rich:component(unidadeArquivoMP)}.hide();
					styleClass=iconePainel />
			</f:facet>

			<h:form enctype=multipart/form-data acceptcharset=UTF-8>
				<h:panelGroup id=arquivoPG>
					<tcesc:inputFile id=arquivo
						value=#{restricaoMB.arquivoUnidade} required=true />
					<div align=right>
						<h:panelGrid columns=2>
							<h:commandButton value=#{bundle.upload} styleClass=botaoAcao
								action=#{restricaoMB.uploadUnidade} />
							<a4j:commandButton value=#{bundle.cancelar}
								styleClass=botaoAcao render=@none execute=@none
								immediate=true
								oncomplete=#{rich:component(unidadeArquivoMP)}.hide(); />
						</h:panelGrid>
					</div>
				</h:panelGroup>
			</h:form>
		</rich:popupPanel>


Atenciosamente.
GOSTEI 0
Fabio Zimmermann

Fabio Zimmermann

09/07/2012

Abaixo, segue mais do código em questão:

RestricaoMB.java:


package xxxxxxxxxxxxx.controle;

................................

/**
 * 
 */
@ViewScoped
@ManagedBean(name = restricaoMB)
public class RestricaoMB extends GenericMB implements Serializable {

	private static final long serialVersionUID = 7847200068974402190L;

	private static final String MSG_ERRO_UPLOAD = MSG_erroUploadUnidade;

	private Restricao restricaoRN; // Regras de negócio

..........................................

	private SFI_AnaliseRestricaoCA analiseRestricaoSelecionada;

	private File arquivoUnidade;
	private String arquivoUnidadeTmpNome;
	private String tipoRespostaUnidade;

	/**
	 * chamado para inicialização do managed bean
	 */
	@PostConstruct
	public void inicializaBean() {
......................
	}


    /**
     * Faz upload do arquivo de resposta de Unidade para área temporária.
     * 
     * @return
     */
	public String uploadUnidade() {
		try {
			arquivoUnidadeTmpNome = this.restricaoRN.uploadArquivoToTmp(arquivoUnidade);

		} catch (IOException e) {
			this.logErro(e);
			FacesUtils.Mensagem.adicionaMensagem(this.getMessages()
					.getMensagem(MSG_ERRO_UPLOAD), FacesMessage.SEVERITY_ERROR);
		}
		return null;
	}

.....................................................
	
}




restricao.xhtml:

<?xml version=1.0 encoding=UTF-8 ?>
<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:rich=http://richfaces.org/rich
	xmlns:a4j=http://richfaces.org/a4j
	xmlns:xxxxxxx=http://xxxxxxxx>

<ui:composition template=/pages/template/base.xhtml>
	<ui:param name=titulo value=#{bundle.restricoes} />

	<ui:define name=messages />
	<ui:define name=content>

		<h:panelGrid id=selecionaANACA>
			<rich:panel>
				<rich:messages globalOnly=true />
				<h:panelGroup id=selecaoGroup>
					<h:panelGrid columns=3
						columnClasses=colunaDescricao, colunaValor, colunaMensagem>

						<h:outputLabel value=#{bundle.tipoDeRestricao} for=cbRestricao />
						<h:selectOneMenu id=cbRestricao
								valueChangeListener=#{restricaoMB.selecionaRestricao}
								converter=conversorGenerico style=width: 458px>
							<f:selectItem value=# itemLabel=#{bundle.selecione} />
							<f:selectItems value=#{restricaoMB.comboRestricao} />
							<f:ajax execute=@this render=@form />

							<a4j:ajax execute=@this render=outBranco
								onbegin=#{rich:component(aguarde)}.show();
								oncomplete=#{rich:component(aguarde)}.hide();
								onerror=#{rich:component(aguarde)}.hide(); />

						</h:selectOneMenu>
						<rich:message for=cbRestricao />

					</h:panelGrid>
				</h:panelGroup>

				<ui:include src=/pages/template/painelEspera.xhtml>
					<ui:param name=id value=aguarde />
				</ui:include>

			</rich:panel>
		</h:panelGrid>

		<br></br>
		<p><h:outputText value=  id=outBranco /></p>
		<br></br>

		<p><h:outputText value=#{bundle.descricaoRestricao} rendered=true /></p>
		<rich:editor id=edDescricaoRestricao
				rendered=#{restricaoMB.permissaoEscrita and !restricaoMB.analiseRestricaoSelecionada.restricaoCA.tipoSistema}
				readonly=false toolbar=custom
				value=#{restricaoMB.analiseRestricaoSelecionada.descRestricao}>
			<f:facet name=config>
				toolbar_custom:  
				[                      
					{ name: insert, items : [ SpecialChar] },  
					{ name: basicstyles, items : [ Bold,Italic,-,RemoveFormat ] },  
					{ name: styles, items : [ Fon tSize ] },
					{ name: colors, items : [ TextColor,BGColor ] },
					{ name: tools, items : [ Maximize, ShowBlocks ] }
				]
			</f:facet>
		</rich:editor>

		<rich:editor id=edDescricaoRestricaoRO
				rendered=#{!restricaoMB.permissaoEscrita or restricaoMB.analiseRestricaoSelecionada.restricaoCA.tipoSistema}
				readonly=true toolbar=custom
				value=#{restricaoMB.analiseRestricaoSelecionada.descRestricao}>
			<f:facet name=config>
				toolbar_custom:  
				[                      
					{ name: tools, items : [ Maximize, ShowBlocks ] }
				]
			</f:facet>
		</rich:editor>


		<br></br>
		<p><h:outputText value=  /></p>
		<br></br>

		<p><h:outputText value=#{bundle.respostaUnidade} rendered=true /></p>



		<h:selectOneRadio id=tipoRespostaUnidade value=#{restricaoMB.tipoRespostaUnidade}>
			<f:selectItem id=respostaUnidadeItem1 itemLabel=Digitar texto itemValue=1 />
			<f:selectItem id=respostaUnidadeItem2 itemLabel=Upload arquivo itemValue=2 />
			<a4j:ajax execute=@this render=outBranco
				onbegin=#{rich:component(aguarde)}.show();
				oncomplete=#{rich:component(aguarde)}.hide();
					if( #{restricaoMB.tipoRespostaUnidade == 1} ) { #{rich:component(unidadeTextoMP)}.show(); }; 
					if( #{restricaoMB.tipoRespostaUnidade == 2} ) { #{rich:component(unidadeArquivoMP)}.show(); }
				onerror=#{rich:component(aguarde)}.hide(); />
		</h:selectOneRadio>



		<rich:popupPanel modal=true id=unidadeTextoMP autosized=true
				rendered=#{menuMB.perfilEdicao}>
			<f:facet name=header>
				<h:outputText value=#{bundle.digitaUnidade} />
			</f:facet>
			<f:facet name=controls>
				<h:graphicImage value=/resources/images/close.jpg
					onclick=#{rich:component(unidadeTextoMP)}.hide();
					styleClass=iconePainel />
			</f:facet>

			<h:form acceptcharset=UTF-8>
				<h:panelGroup id=arquivoPG>
					<rich:editor id=edRespostaUnidade rendered=true
							toolbar=custom
							value=#{restricaoMB.analiseRestricaoSelecionada.respostaUnidade}>
						<f:facet name=config>
							toolbar_custom:  
							[                      
								{ name: insert, items : [ SpecialChar] },  
								{ name: basicstyles, items : [ Bold,Italic,-,RemoveFormat ] },  
								{ name: styles, items : [ FontSize ] },
								{ name: colors, items : [ TextColor,BGColor ] },
								{ name: tools, items : [ Maximize, ShowBlocks ] }
							]
						</f:facet>
					</rich:editor>

					<div align=right>
						<h:panelGrid columns=2>
							<h:commandButton value=#{bundle.salvar} styleClass=botaoAcao
								action=#{restricaoMB.uploadUnidade} />
							<a4j:commandButton value=#{bundle.cancelar}
								styleClass=botaoAcao render=@none execute=@none
								immediate=true
								oncomplete=#{rich:component(unidadeTextoMP)}.hide(); />
						</h:panelGrid>
					</div>
				</h:panelGroup>
			</h:form>
		</rich:popupPanel>





		<!-- POPUP EM QUESTAO, COMENTADO ATE AQUI: -->

		<rich:popupPanel modal=true id=unidadeArquivoMP autosized=true
				rendered=#{menuMB.perfilEdicao}>
			<f:facet name=header>
				<h:outputText value=#{bundle.uploadUnidade} />
			</f:facet>
			<f:facet name=controls>
				<h:graphicImage value=/resources/images/close.jpg
					onclick=#{rich:component(unidadeArquivoMP)}.hide();
					styleClass=iconePainel />
			</f:facet>

			<h:form enctype=multipart/form-data acceptcharset=UTF-8>
				<h:panelGroup id=arquivoPG>
					<xxxxxxxxx:inputFile id=arquivo
						value=#{restricaoMB.arquivoUnidade} required=true />
					<div align=right>
						<h:panelGrid columns=2>
							<h:commandButton value=#{bundle.upload} styleClass=botaoAcao
								action=#{restricaoMB.uploadUnidade} />
							<a4j:commandButton value=#{bundle.cancelar}
								styleClass=botaoAcao render=@none execute=@none
								immediate=true
								oncomplete=#{rich:component(unidadeArquivoMP)}.hide(); />
						</h:panelGrid>
					</div>
				</h:panelGroup>
			</h:form>
		</rich:popupPanel>



		<br></br>
		<p><h:outputText value=  /></p>
		<br></br>

		<p><h:outputText value=#{bundle.respostaTecnico} rendered=true /></p>
		<rich:editor id=edRespostaTecnico rendered=true
				readonly=#{!restricaoMB.permissaoEscrita} toolbar=custom
				value=#{restricaoMB.analiseRestricaoSelecionada.respostaTecnico}>
			<f:facet name=config>
				toolbar_custom:  
				[                      
					{ name: insert, items : [ SpecialChar] },  
					{ name: basicstyles, items : [ Bold,Italic,-,RemoveFormat ] },  
					{ name: styles, items : [ FontSize ] },
					{ name: colors, items : [ TextColor,BGColor ] },
					{ name: tools, items : [ Maximize, ShowBlocks ] }
				]
			</f:facet>
		</rich:editor>

		<br></br>
		<p><h:outputText value=  /></p>
		<br></br>

		<h:outputLabel value=#{bundle.sanada} for=cbSanada rendered=true />
		<h:selectOneMenu id=cbSanada rendered=true
				disabled=#{!restricaoMB.permissaoEscrita or restricaoMB.analiseRestricaoSelecionada.restricaoCA.tipoSistema}
				value=#{restricaoMB.analiseRestricaoSelecionada.indicativoSanada}
				converter=conversorGenerico style=width: 458px>
			<f:selectItems value=#{restricaoMB.comboSanada} />
		</h:selectOneMenu>

		<br></br>
		<p><h:outputText value=  /></p>
		<br></br>

		<div align=right>
			<a4j:commandButton value=#{bundle.salvar}
				style=text-align: center;
				disabled=false styleClass=botaoAcao
				onclick=#{rich:component(aguarde)}.show()
				oncomplete=#{rich:component(aguarde)}.hide()
				action=#{restricaoMB.salvaAnalise} id=botaoSeleciona />
		</div>
		<br></br>
		<p><h:outputText value=  /></p>
		<br></br>

	</ui:define>

</ui:composition>
</html>


GOSTEI 0
POSTAR