Problema com JSF 2.0, RichFaces 4 , popup e upload
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
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
Curtidas 0
Respostas
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
att Davi
GOSTEI 0
Fabio Zimmermann
09/07/2012
Ok, segue abaixo o código em questão:
Atenciosamente.
<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
09/07/2012
Abaixo, segue mais do código em questão:
RestricaoMB.java:
restricao.xhtml:
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