Pessoal, passei o dia tentando construir um form JSF que faça Upload de arquivo, sendo que estou tendo problemas. Simplesmente, ao submeter o formulário, a página recarrega.
Já coloquei algumas flags no meu código para saber até onde ele está chegando, também já utilizei o Debug do NetBeans. Com isso, cheguei na conclusão de que o método do meu Bean setado no action do CommandButton não está funcionando, ou seja, a página não está acionando o método do Bean que vai tratar os dados e efetuar o upload.
Eis o código:
<%@ include file="/default/top.jsp" %>
<f:view>
<h:form id="add_ontology" enctype="multipart/form-data">
<h:panelGrid columns="1" headerClass="boxTituloPagina"
styleClass="boxCorpoPagina">
<f:facet name="header">
<h:outputText id="pageTitle" value="Adicionar Ontologia"
styleClass="tituloPagina"/>
</f:facet>
<h:outputText id="ont_file_txt" value="Arquivo *.owl para carregar:"
styleClass="textoForm1" />
<t:inputFileUpload id="ont_file" value="#{addOntologyBean.file}"
size="67" storage="file" required="true"
accept="/owl/*">
<f:validator validatorId="uploadValidator"/>
</t:inputFileUpload>
<h:outputText id="ont_name_txt" value="Nome da Ontologia:"
styleClass="textoForm1"/>
<h:inputText maxlength="100" size="68" id="ont_name_vlr"
value="#{addOntologyBean.ontName}" />
<h:outputText id="know_area_txt"
value="Área do conhecimento a qual pertence:"
styleClass="textoForm1"/>
<h:selectOneMenu id="know_area_vlr" value="#{addOntologyBean.relatedKnowArea}">
<f:selectItems value="#{addOntologyBean.allKnowAreas}"/>
</h:selectOneMenu>
<h:outputText id="ont_descript_txt" value="Breve descrição:"
styleClass="textoForm1"/>
<h:inputTextarea id="ont_descript_vlr" rows="4" cols="50"
value="#{addOntologyBean.ontDescription}"/>
<h:commandButton id="cmb_entrar" value="Salvar" styleClass="botao"
action="#{addOntologyBean.doSaveNew}" />
<h:message for="add_ontology" styleClass="errorMessage"/>
<h:message id="uploadError" for="ont_file" styleClass="errorMessage"/>
</h:panelGrid>
</h:form>
</f:view>
<%@ include file="/default/footer.jsp" %>
Uma coisa interessante que constatei é que, se eu comentar o bloco a seguir do código mostrado acima, o upload funciona corretamente. Fico encucado porque não consigo entender o que tem de errado neste bloco:
<h:selectOneMenu id="know_area_vlr" value="#{addOntologyBean.relatedKnowArea}">
<f:selectItems value="#{addOntologyBean.allKnowAreas}"/>
</h:selectOneMenu>
Antes que peçam também o próprio Bean, vou colar aqui os métodos relacionados com o código “defeituoso” acima:
public class AddOntology {
//private String fileName;
private UploadedFile file;
//private long fileSize;
private String ontName;
private String ontDescription;
private SelectItem relatedKnowArea;
private ArrayList allKnowAreas;
//-------------------------------------------------------------------------
public AddOntology() {
try{
Knowledge knowledge;
knowledge = new Knowledge();
this.allKnowAreas = knowledge.getAllKnowledgeAreas();
//this.relatedKnowArea = (SelectItem) knowledge.getAllKnowledgeAreas().get(0);
} catch (PersistenceException e) {
this.allKnowAreas = new ArrayList();
this.allKnowAreas.add(new SelectItem("nenhum",
"Não foi possível conectar à base"));
}
}
//-------------------------------------------------------------------------
public UploadedFile getFile() {
return this.file;
}
public void setFile(UploadedFile file) {
this.file = file;
}
//-------------------------------------------------------------------------
public String getOntName() {
return this.ontName;
}
public void setOntName(String ontName) {
this.ontName = ontName;
}
//-------------------------------------------------------------------------
public String getOntDescription() {
return this.ontDescription;
}
public void setOntDescription(String ontDescription) {
this.ontDescription = ontDescription;
}
//-------------------------------------------------------------------------
public SelectItem getRelatedKnowArea() {
return this.relatedKnowArea;
}
public void setRelatedKnowArea(SelectItem relatedKnowArea) {
this.relatedKnowArea = relatedKnowArea;
}
//-------------------------------------------------------------------------
public ArrayList getAllKnowAreas() {
return this.allKnowAreas;
}
public void setAllKnowAreas(ArrayList allKnowAreas) {
this.allKnowAreas = allKnowAreas;
}
//-------------------------------------------------------------------------
public String doSaveNew() {
...
/* Não é nessa parte pois como já disse, se eu comentar o código do selectItem, esse método é acionado e funciona
tudo perfeitamente. */
}
}
Alguém pode me dar uma luz? Já tentei de tudo.