Interceptor não busca os Dados

Boa tarde a todos!
Configurei um interceptor para agir em cima de um action buscando um fileUpload da minha JSP.

Acontece que o arquivo não vem para a action de maneira alguma.

Abaixo segue o código.

Obrigado.


<%@ taglib uri="/struts-tags" prefix="s" %>

<jsp:include page="/layouts/cabecalho.jsp"/>

<table width="70%" height="508" border="0" align="center" cellpadding="0" cellspacing="10">
	<tr>
		<td height="2" align="center"><img src="img/px1_azul.jpg" width="100%" height="1"></td>
	</tr>
	<tr>
		<td height="410" valign="top" align="center">
			<table border="0" cellpadding="2" cellspacing="2" width="391" align="center">
				<form action="fileuploadenviar.action" method="post" enctype="multipart/form-data">
					<tr valign="middle">
						<td align="right">Descricao:</td>
						<td>	<input type="text" name="descricao" id="fileupload.descricao" label="descricao" class="form" ></td>
					</tr>
					<tr valign="middle">
						<td align="right">Arquivo:</td>
						<td><input type="file" name="file"      id="fileupload.file"      label="file" ></td>
					</tr>
					<tr valign="middle">
						<td align="right"> </td>
						<td><input class="button" type="submit" value="Enviar"></td>
					</tr>
				</form>
			</table>
		</td>
	</tr>
</table>

<jsp:include page="/layouts/rodape.jsp"/>

/*
 * FileUploadAction.java
 *
 * Created on 8 de Dezembro de 2006, 16:13
 *
 */

package com.cosmosat.struts;

import com.cosmosat.facade.FileUploadFacade;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;

import javax.naming.NamingException;
import org.apache.struts2.Action;

import org.apache.struts2.components.File;


public class FileUploadAction{
	
	private File   file;
	private String descricao   = " ";
	private String contentType = " ";
	private String filename    = " ";
	
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	public void setUpload(File file) {
		this.file = file;
	}
	
	public void setUploadContentType(String contentType) {
		this.contentType = contentType;
	}
	
	public void setUploadFileName(String filename) {
		this.filename = filename;
	}
	
	public String enviar() throws NamingException, SQLException, FileNotFoundException, IOException{
		
		System.out.println(descricao);
		System.out.println(filename);
		System.out.println(contentType);
		
		
		
		FileUploadFacade facade = new FileUploadFacade();
		if(facade.salvar(descricao))
			return "success";
		else
			return "fails";
		
	}
	
	
	
	
}

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	
	<package name="fileupload" extends="principal">
		
		<action name="fileuploadenviar" class="com.cosmosat.struts.FileUploadAction" method="enviar">
			<result name="success">/META-INF/pages/principal.jsp</result>
			<result name="fails">  /META-INF/pages/principal.jsp</result>
			<interceptor-ref name="defaultStack"/>
		</action>
		
	</package>
	
</struts>

isso aqui pode te ajudar:

http://www.roseindia.net/struts/strutsfileupload.shtml

ps: foi o primeiro link na consulta “struts file upload” no google

Eu não vi nenhum interceptor de upload de arquivos no arquivo de configuração da action. Há um tempo atrás, postei no meu blog um exemplo de upload de arquivo com o WebWork. Como você está usando o Struts2, não terá muitos problemas em adaptar:

http://blognotfoundexception.blogspot.com/2006/10/upload-com-webwork.html

Bom dia a todos!

Caro Guilherme, seu tutorial está ótimo, mas meu código está igual ao seu exemplo. Alterei a configuração da minha action para a seguinte:

Mas a action ainda não consegue buscar o arquivo de upload da jps.
Fica nulo.

Abraços.

Só mais um detalhe, quando eu tiro o

da jsp, a descrição é enviada normalmente.

Uma coisa que reparei é que você não está utilizando as tags do framework. Monte o formulário com as tags e faça um teste.

Segue a referência para as tags: http://struts.apache.org/WW/tag-reference.html

Testei com as tags do Struts 2 e não resolveu…

Acho que deve faltar configurar qualquer coisa…

Mas segui todos os passos da documentação do Struts 2 e não fala mais nada.

TA OSSO…

Está brabo mesmo. O seu struts.xml não está com essa configuração:

[code]<struts>
<include file="struts-default.xml"/>

&lt;package name=&quot;default&quot; extends=&quot;struts-default&quot;&gt;
&lt;/package&gt;

</struts>[/code]

Guilherme, estava dando uma olhada aqui e o meu pacote do

não possui a classe

Eu tenho que implementar a mesma ou consigo fazer o download dela?

A propósito o meu struts.xml está com a configuração sugerida.

Abraços.

Olhei aqui e o mesmo se encontra dentro de

Gostaria de verificar a configuração do meu struts-default.xml

A onde ele fica?

Igor, baixei o Struts2.0.1 e o interceptor FileUploadInterceptor está no pacote:

Baixe essa versão e faça um teste. A propósito, qual versão você está usando ?

Já sei porque, seu interceptor está apontando para o antigo interceptor do XWork. Agora ele está no JAR do Struts2.

Kara, eu ja baixei o Struts 2.0.1 e verifiquei meu struts-default e está tudo igualzinho o do site.
Verifiquei meu código todo novamente, na verdade está como se fosse um Ctrl + c e Ctrl + v da documentação.

Pior que realmente não sei o que eu faço mais

Tem outra forma de fazer isso?

Tem algumas coisas que eu poderia te falar, como por exemplo: eu não sei se o upload de arquivos funciona por padrão com o Apache File Upload ou se funciona com o componente de upload do WebWork.

Se você reparar, na pasta lib da distribuição do Struts2, há um JAR chamado struts2-pell-multipart-plugin-2.0.1. Esse componente que realiza o upload de arquivos no WebWork. Não tenho certeza se é esse que é utililizado no Struts2, não encontrei nada na documentação.

Ocorre alguma mensagem nos logs ?

Isso é que está ferrando tudo…
Não dá erro nenhum no Log.
Mas em uma das debugações verifiquei que os métodos


	public void setUpload&#40;File file&#41; &#123;
		this.file = file;
	&#125;
	
	public void setUploadContentType&#40;String contentType&#41; &#123;
		this.contentType = contentType;
	&#125;
	
	public void setUploadFileName&#40;String filename&#41; &#123;
		this.filename = filename;
	&#125;

não estão sendo invocados.
Eles deveriam ser executados logo após o submit da página e nada disso ocorre. Já cai direto no método definido pela Action.

Alias, está dando a seguinte mensagem de erro sempre que executo pela primeira vez.

Ótimo. Como eu pensei, ele está usando o Commons File Upload. Agora você tem que colocar o JAR desse componente na pasta WEB-INF/lib.

Você pode baixá-lo no seguinte endereço: http://jakarta.apache.org/commons/fileupload/

Kara, vou largar pra la…
Se alguem conseguir fazer por favor postem ai.

Abraços.

Colocou o JAR no classpath ? pelo erro, parece que só falta isso para funcionar. Assim que der, vou fazer um exemplo.

Adicionei sim…
Usei o Ethreal e vi o pacote arquivo sendo enviado.
Porém a Action não conseguiu recebé-lo.