Interceptor não busca os Dados

22 respostas
I

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>

22 Respostas

P

isso aqui pode te ajudar:

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

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

G

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

I

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.

I

Só mais um detalhe, quando eu tiro o

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

G

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

I

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…

G

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

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

    <package name="default" extends="struts-default">
    </package>
</struts>
I

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.

I

Olhei aqui e o mesmo se encontra dentro de

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

A onde ele fica?

G

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 ?

G

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

I

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?

G

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 ?

I

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(File file) {
		this.file = file;
	}
	
	public void setUploadContentType(String contentType) {
		this.contentType = contentType;
	}
	
	public void setUploadFileName(String filename) {
		this.filename = filename;
	}

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.

I

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

G

Ó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/

I

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

Abraços.

G

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

I

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

I

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

N

Cara, o commons-fileupload vem na distribuição padrão do Struts 2.

Estou com a versão Struts 2.0.3 aqui em casa e dá o mesmo problema.

Envia a parte do teu struts.xml que configura a action pra gente dar uma olhada.

Meu struts tá assim:

...
		
		<action name="doUpload" class="com.jlabs.user.action.UploadAction">
			<interceptor-ref name="fileUpload">
				<param name="maximumSize">10485760</param><!-- 10Mb -->
			</interceptor-ref>
			<result name="input">/user/curriculumUpload.jsp</result>
		</action>
...
H

por que vc não usa a versao 2.0.6 GA que está disponível no site ?

Criado 11 de dezembro de 2006
Ultima resposta 6 de mar. de 2007
Respostas 22
Participantes 5