Erro ao utilizar o componente t:inputfileupload

Olá amigos do GUJ, boa noite.
Estou tendo um problema ao utilizar o componente t: inputfileupload.
Tenho um jspx com o seguinte código:

<t:inputFileUpload id=“ifuArquivo” required=“true” value="#{professorController.arquivoEnviado}" accept=“txt, jpg, gif, png, bmp” storage=“file” />

<a4j:commandButton action="#{professorController.enviarArquivo}" value=“Anexar” styleClass=“botoes” reRender=“panInclusaoProfessores” />

O controlador que realiza as ações, é uma sessão e tem os seguintes atributos e métodos que o jspx acima está mapeado:

public String enviarArquivo() throws IOException {
try {
/* Criando arquivo no servidor /
long size = getArquivoEnviado().getSize();
File file = new File(getArquivoEnviado().getName());
BufferedInputStream bufferedInputStream = new BufferedInputStream(this.getArquivoEnviado().getInputStream());
FileOutputStream fileOutputStream = new FileOutputStream(file);
/
Salvando o arquivo */
try {
byte[] buffer = new byte[51200];
int count;
while ((count = bufferedInputStream.read(buffer)) > 0) {
fileOutputStream.write(buffer, 0, count);
return "sucesso";
}

} finally {
bufferedInputStream.close();
fileOutputStream.close();
}
} catch (IOException exception) {
exception.printStackTrace();
}
return "erro";
}

Atributo:

public UploadedFile getArquivoEnviado() {
return arquivoEnviado;
}

public void setArquivoEnviado(UploadedFile arquivoEnviado) {
this.arquivoEnviado = arquivoEnviado;
}

O controlador encontra-se como sessão, mas já tentei colocá-lo como request, e continuou não funcionando.
Ao chamar o getArquivoEnviado() no método enviarArquivo() este encontra-se nulo.

Segue abaixo um trecho do meu web.xml que implementa o filtro correspondente:

<!-- Extensions Filter -->
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>20k</param-value>
<description>Set the size limit for uploaded files.
Format: 10 - 10 bytes
10k - 10 KB
10m - 10 MB
1g - 1 GB
</description>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>10k</param-value>
<description>Set the threshold size - files
below this limit are stored in memory, files above
this limit are stored on disk.
Format: 10 - 10 bytes
10k - 10 KB
10m - 10 MB
1g - 1 GB
</description>
</init-param>
<init-param>
<param-name>uploadRepositoryPath</param-name>
<param-value>/img</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>extensionsFilter</filter-name>
<url-pattern>/app/
</url-pattern>
</filter-mapping>

Pesquisando no google, encontrei diversas pessoas com esse problema, e ninguém conseguiu resolver.
Alguém teria alguma solução para essa questão?
Agradeço desde já pela atenção de todos,
Atenciosamente,
Lessandro

Olá lessandronp!

Também estou com problemas com o t:inputfileupload, o arquivo estava nulo que nem no seu caso, eu pude perceber na minha aplicação que esse item o “t:inputfileupload” funciona somente em “h:form” e com botões “h:commandbutton”, não sei t explicar o porque!
Tente utilizar o “h” e depois me diga o resultado!

Ou se conseguir resolver com “a4j” me fale q também preciso resolver o problema aqui!

Abraços!
Markinho

Hum, ta ok.
Estarei verificando essa questão e te falo.
Pode ser algum problema de incompatibilidade entre o richFaces ou Ajax e o tomahawk.
Abraços,
Att,
Lessandro

Realmente com o a4j:commandButton não finciona, somente com o h:commandButton.
Outra coisa q tive q colocar no form foi:

<h:form id=“formPrincipal” enctype=“multipart/form-data”>
Ae funcionou.

Agora a questão é, como exibir essa imagem que foi enviada para o servidor?

Abraços,
Att,
Lessandro

Olá amigo
fiz com o vraptor esse esquema do usuario fazer upload de uma imagem, e dps carregar essa imagem que está no servidor, talvez dê pra aproveitar a idéia:
eu salvo a imagem que fica em uma pasta temporária no servidor para a pasta da aplicação e depois para recuperar a imagem eu monto o caminho:
com o método:

	/**
	 * Monta o path da imagem a partir do context path (HttpServletRequest::getContextPath),
	 * path da imagem e nome da imagem, que será aplicada uppercase.
	 * @param contextPath
	 * 		HttpServletRequest::getContextPath
	 * @param imagePath
	 * 		Path da imagem.
	 * @param nomeImagem
	 * 		Nom da imagem.
	 * @return
	 * 		Image path.
	 */
	private String getImagePath(String contextPath, String imagePath, String nomeImagem) {
		StringBuffer sBuffer = new StringBuffer();
		sBuffer.append(contextPath);
		sBuffer.append(imagePath);
		sBuffer.append(nomeImagem.toUpperCase());
		return sBuffer.toString();
	}

espero que ajude :wink:

Ok.
Vou tentar implementar esse método e ver se vai rolar.
qq coisa eu posto aki
:slight_smile:
Obrigado
Abraços,
Lessandro

Coloquei aqui, mas não funcionou não:

&lt;h:panelGrid id="pgrFotografia" columns="3" cellspacing="5px"&gt;
     &lt;h:graphicImage value="#{professorController.caminhoImagem}" /&gt;
	&lt;t:inputFileUpload storage="file"
	value="#{professorController.imagemEnviada}" /&gt;
	&lt;h:commandButton action="#{professorController.enviarImagem}" 
	     value="Anexar" styleClass="botoes"&gt;
	     &lt;a4j:support reRender="pgrFotografia" /&gt;
        &lt;/h:commandButton&gt;
&lt;/h:panelGrid&gt;

Dei uma modificada nele, e este retorna algo como:

public String getCaminhoImagem() {
    StringBuffer sBuffer = new StringBuffer();  
    sBuffer.append(caminhoCompletoImagem);  
    return sBuffer.toString();  
}

Onde caminhoCompletoImagem retorna:
C:\Projetos\ProjetosEclipse.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SCA\img\0000001.jpg

por estar dentro do a4j:form não funcionava, no http://www.jboss.org/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/html_single/index.html diz que tem que colocar o filtro do richfaces em cima dos outros, ae funcionou :smiley:

eh isso msm… Eu havia conseguido tb, mas esqueci de postar a resposta aki.
Tb li num site isso.
Msm assim, vlw pela dica. É dessa forma que vamos disserminando conhecimentos sem reter informações e assim, aprendendo sempre mais.
Abraços,
Lessandro