Pessoal, bom dia.
Estou com um pepino que não estou conseguindo resolver. Já pesquisei outros tópicos similares aqui no grupo, mas as soluções apresentadas não resolveram meu problema.
Estou utilizando jsf 1.2 e o componente rich:fileUpload um página para realizar upload de planilha. Quando algum erro na leitura da planilha ocorre, eu registro uma mensagem de erro no bean e, através do reRender, mando exibir a mensagem de erro na tela. Segue meu código:
<h:form prependId="false">
<a4j:outputPanel id="messageArea">
<div style="margin-top: 20px;">
<h:messages globalOnly="true" errorClass="labelsFormularioErro imageFormularioErro"
infoClass="info" showSummary="true"></h:messages>
</div>
</a4j:outputPanel>
<span id="loading" style="display: none;"> <h:outputLabel
value="#{msgs['matriz.tempo.loading']}"></h:outputLabel><img
src="resource.faces?name=image/loading.gif" /> </span>
<rich:fileUpload acceptedTypes="xlsx, xls" autoclear="true"
fileUploadListener="#{matrizTempo.fileUploadListener}"
addControlLabel="#{msgs['matriz.tempo.adicionar']}"
clearAllControlLabel="#{msgs['matriz.tempo.limparTudo']}"
clearControlLabel="#{msgs['matriz.tempo.limpar']}"
stopEntryControlLabel="#{msgs['matriz.tempo.interromper']}"
uploadControlLabel="#{msgs['matriz.tempo.enviarArquivo']}"
allowFlash="auto" addButtonClass="botoes" stopButtonClass="botoes"
cleanButtonClass="botoes">
<f:facet name="label">
<h:outputText value="#{msgs['matriz.tempo.uploadMsg']}" />
</f:facet>
<a4j:support ajaxSingle="true" event="onuploadcomplete"
reRender="messageArea" />
<a4j:support ajaxSingle="true" event="onuploaderror"
reRender="messageArea" />
</rich:fileUpload>
</h:form>
public String fileUploadListener(UploadEvent evt) {
UploadItem ui = evt.getUploadItem();
try {
PlanilhaMatrizTempo planilha = new PlanilhaMatrizTempo(ui.getFile());
List<String> colunas = planilha.montaColunas();
List<String> linhas = planilha.montaLinhas();
int lin = 1;
for (String nomeUnidadeLinha : linhas) {
int col = 1;
Objeto unidadeLinha = ObjetoHelper.getObjetoByNomeAndClassePai(nomeUnidadeLinha, ConstantesMetadados.DONO);
if (unidadeLinha == null){
addMessage(I18n.getMessage("matriz.tempo.unidadeNaoExiste",nomeUnidadeLinha));
} else {
for (String nomeUnidadeColuna : colunas) {
Objeto unidadeColuna = ObjetoHelper.getObjetoByNomeAndClassePai(nomeUnidadeColuna, ConstantesMetadados.DONO);
if (unidadeColuna == null){
addMessage(I18n.getMessage("matriz.tempo.unidadeNaoExiste",nomeUnidadeColuna));
} else {
String tempo = planilha.getTempo(col, lin);
try {
MatrizTempo matriz = MatrizTempoHelper.load(unidadeLinha, unidadeColuna);
if (matriz == null){
matriz = new MatrizTempo();
matriz.setOrigem(unidadeLinha);
matriz.setDestino(unidadeColuna);
}
matriz.setMinutos(Integer.parseInt(tempo));
MatrizTempoHelper.save(getVisit().getSession(),matriz);
} catch (PersistenciaException e) {
logger.error("",e);
addMessage(I18n.getMessage("matriz.tempo.erroSalvar"));
} catch (SQLException e) {
logger.error("",e);
addMessage(I18n.getMessage("matriz.tempo.erroSalvar"));
}
}
col++;
}
}
lin++;
}
} catch (Exception e) {
addMessage(I18n.getMessage("matriz.tempo.erroSalvar"));
logger.error("Erro ao ler o formato da planilha", e);
}
return null;
}
private void addMessage(FacesMessage message) {
FacesContext.getCurrentInstance().addMessage(
null, message);
}
Quando eu executo o código e um erro ocorre, ele me apresenta a seguinte mensagem no console:
10/01/2012 09:03:53 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=null[severity=(INFO 0), summary=(Ocorreu um erro ao salvar a planilha.), detail=(Ocorreu um erro ao salvar a planilha.)]
Pesquisando aqui no forum, vi a sugestão de trocar o <h:messages/> pelo rich:messages/. Fiz isso, a mensagem não apareceu mais no console, mas a mensagem de erro ainda assim não foi exibida na tela.
Alguém ai faz alguma idéia do que estou fazendo de errado?!
Abraços!