vraptor3 Upload simples

21 respostas
doravan

Caros amigos, mais um problema.
Não estou conseguindo processar o envio de um arquivo de imagem do tipo jpg para o diretório da aplicação.
Recebo erro nullpointer na linha 25 do código.

Esse é o dao

public void salvarFoto(UploadedFile imagem) throws IOException{
				
		try{
			IOUtils.copy(imagem.getFile(), new FileOutputStream(new File("/"+imagem.getFileName()))); //linha 25
			session.beginTransaction();
			session.save(imagem);
			session.beginTransaction().commit();
		}catch(FileNotFoundException e){
			e.printStackTrace();
			throw new FileNotFoundException("Arquivo não encontrado!");
		}catch (IOException e) {
			e.printStackTrace();
			throw new IOException("Não foi possível enviar o arquivo!");
		}	
		
	}

Esse é o controlador

@Resource
public class FotosController extends BaseController {
	
	private final FotosDao fotosDao;
	
	public FotosController(Result result, Validator validator,
			FotosDao fotosDao) {
		super(result, validator);
		this.fotosDao = fotosDao;
		
	}

	@Path("/fotos/formulario")
	public void formulario(){
		
	}
	
	@Path("/fotos/enviar")
	public void enviar(UploadedFile imagem){
		try{
			fotosDao.salvarFoto(imagem);
		}catch(IOException e){
			result.include("error", e.getMessage()).forwardTo(this).formulario();
		}
		result.redirectTo(this).formulario();
	}

}

A JSP tá assim:

<form action="<c:url value="/fotos/enviar" />" method="POST" enctype="multipart/form-data">

	<label>Imagem:</label>
	<input type="file" name="imagem"/><input type="submit"/>

</form>

21 Respostas

G

O que é a linha 25?

Você está usando qual versão do Vraptor e qual o servidor de aplicações / servlet container?

Lucas_Cavalcanti

vc está com o commons-upload no classpath?

H

Galera esse tópico já foi RESOLVIDO, porque estou com o mesmo problema fiz algo apenas para teste e esta indo tudo NULL para a classse

Utilizando: vraptor3.2.0 e o commons.fileupload-1.2.2
Segue codigo:
Minha jsp:

Upload de Imagem

Minha classe:

import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;

import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;

@Resource
public class Teste {

@Post <a class="mention" href="/u/path">@Path</a>("/teste")

public void upload(UploadedFile arquivo, String teste) {

System.out.println(teste);

System.out.println(arquivo);

}

}

Simples assim mas ambos os atributos estão chegando NULOS na classe

Aguem poderia me explicar os motivos?

Grato.

Lucas_Cavalcanti

habilita o log de debug do vraptor e posta aqui o log da requisição do upload pra gente dar uma olhada

H

Desculpe a ignorância mas como faz para habilitar o log de debug do vraptor? fiz uma procura rápida no Google e não achei

Vlw… pela atenção.

G

Se você usa o log4j basta adicionar a categoria br.com.caelum.vraptor para DEBUG. Se você usa o Java Logging basta adicionar a entrada br.com.caelum.vraptor.level=FINEST.

H

Garcia,

Deu certo o log no modo debug vlw… heeheh

Agora vou verificar o log e posto o mesmo

Vlw

H

Lucas,
Seria apenas esta parte do log que vc queria

19:29:04,248 DEBUG [StereotypedBeansRegistrar] scanning class br.com.caelum.vrap

tor.core.DefaultInterceptorStack

19:29:04,249 DEBUG [StereotypedBeansRegistrar] scanning class Teste

19:29:04,249 DEBUG [ResourceHandler     ] Found resource: class Teste

19:29:04,268 DEBUG [ParanamerNameProvider] Found parameter names with paranamer

for Teste.upload(UploadedFile, String) as [arquivo, teste]

19:29:04,272 DEBUG [DefaultParametersControl] For /teste retrieved /teste with {

}

19:29:04,277  INFO [DefaultRouteBuilder ] /teste

[ALL] -> Teste.upload(UploadedFile, String)

19:29:04,278 DEBUG [StereotypedBeansRegistrar] scanning class org.springframewor

k.context.annotation.ConfigurationClassPostProcessor

19:29:04,278 DEBUG [StereotypedBeansRegistrar] scanning class br.com.caelum.vrap

tor.ioc.spring.InjectionBeanPostProcessor

19:29:04,279 DEBUG [StereotypedBeansRegistrar] scanning class org.springframewor

k.beans.factory.annotation.RequiredAnnotationBeanPostProcessor

19:29:04,279 DEBUG [StereotypedBeansRegistrar] scanning class org.springframewor

k.context.annotation.CommonAnnotationBeanPostProcessor

19:29:04,280 DEBUG [StereotypedBeansRegistrar] scanning class org.springframewor

k.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator

19:29:04,280 DEBUG [StereotypedBeansRegistrar] scanning class br.com.caelum.vrap

tor.reflection.CacheBasedTypeCreator

19:29:04,281  INFO [VRaptor             ] VRaptor 3.2.0-SNAPSHOT successfuly ini

tialized

21/12/2010 19:29:04 org.apache.catalina.startup.HostConfig deployDirectory

INFO: Deploying web application directory teste

21/12/2010 19:29:04 org.apache.coyote.http11.Http11Protocol start

INFO: Starting Coyote HTTP/1.1 on http-8080

21/12/2010 19:29:04 org.apache.coyote.ajp.AjpProtocol start

INFO: Starting Coyote AJP/1.3 on ajp-8009

21/12/2010 19:29:04 org.apache.catalina.startup.Catalina start

INFO: Server startup in 2218 ms

Esse agora e tentando fazer o UPLOAD

19:36:28,066 DEBUG [DefaultStaticContentHandler] Deferring request to container:

/siconv/up.jsp

19:36:34,382 DEBUG [VRaptor             ] VRaptor received a new request

19:36:34,418 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.c

aelum.vraptor.http.EncodingHandler

19:36:34,449 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.http.EncodingHandlerFactory

19:36:34,457 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.c

aelum.vraptor.core.RequestExecution

19:36:34,471 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExec

ution

19:36:34,476 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.c

aelum.vraptor.interceptor.multipart.MultipartInterceptor

19:36:34,576 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Servle

t3MultipartInterceptor

19:36:34,576 DEBUG [Servlet3MultipartInterceptor] Request contains multipart dat

a. Try to parse with Servlet3 Part

19:36:34,594 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.ResourceLookupInterceptor

19:36:34,609 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Resour

ceLookupInterceptor

19:36:34,611 DEBUG [DefaultResourceTranslator] trying to access /teste

19:36:34,629 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMe

thod: Teste.uploadTeste.upload(UploadedFile, String)]

19:36:34,630 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.FlashInterceptor

19:36:34,646 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashI

nterceptor

19:36:34,648 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.InterceptorListPriorToExecutionExtractor

19:36:34,652 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Interc

eptorListPriorToExecutionExtractor

19:36:34,667 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.multipart.Servlet3MultipartInterceptor

19:36:34,668 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Servle

t3MultipartInterceptor

19:36:34,669 DEBUG [Servlet3MultipartInterceptor] Request contains multipart dat

a. Try to parse with Servlet3 Part

19:36:34,669 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.InstantiateInterceptor

19:36:34,674 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Instan

tiateInterceptor

19:36:34,675 DEBUG [VRaptorApplicationContext] Cache miss for class Teste

19:36:34,695 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.ParametersInstantiatorInterceptor

19:36:34,761 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInsta

ntiatorInterceptor

19:36:34,768 DEBUG [JstlLocalization    ] couldnt find message bundle, creating

an empty one

19:36:34,769 DEBUG [AsmBasedTypeCreator ] Trying to make class for Teste$upload$

892644366$1

19:36:34,784 DEBUG [ParanamerNameProvider] Found parameter names with paranamer

for Teste.upload(UploadedFile, String) as [arquivo, teste]

19:36:34,786 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating typ

e are: [Arquivo, Teste]

19:36:34,787 DEBUG [AsmBasedTypeCreator ] Method for field Arquivo being defin

ed for type Lbr/com/caelum/vraptor/interceptor/multipart/UploadedFile;

19:36:34,789 DEBUG [AsmBasedTypeCreator ] Method for field Teste being defined

for type Ljava/lang/String;

19:36:34,790 DEBUG [AsmBasedTypeCreator ] Methods: [public void Teste$upload$892

644366$1.setArquivo(br.com.caelum.vraptor.interceptor.multipart.UploadedFile), p

ublic br.com.caelum.vraptor.interceptor.multipart.UploadedFile Teste$upload$8926

44366$1.getArquivo(), public void Teste$upload$892644366$1.setTeste(<a href="http://java.lang.St">java.lang.St</a>

ring), public java.lang.String Teste$upload$892644366$1.getTeste()]

19:36:34,792 DEBUG [AsmBasedTypeCreator ] Fields: [private br.com.caelum.vraptor

.interceptor.multipart.UploadedFile Teste$upload$892644366$1.Arquivo_, private j

ava.lang.String Teste$upload$892644366$1.Teste_]

19:36:34,793 DEBUG [CacheBasedTypeCreator] cached generic type for method [Defau

ltResourceMethod: Teste.uploadTeste.upload(UploadedFile, String)]

19:36:34,804 DEBUG [ParanamerNameProvider] Found parameter names with paranamer

for Teste.upload(UploadedFile, String) as [arquivo, teste]

19:36:34,805 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [Def

aultResourceMethod: Teste.uploadTeste.upload(UploadedFile, String)] are [null, n

ull]

19:36:34,807 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.ExceptionHandlerInterceptor

19:36:34,812 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Except

ionHandlerInterceptor

19:36:34,813 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.interceptor.ExecuteMethodInterceptor

19:36:34,818 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Execut

eMethodInterceptor

19:36:34,819 DEBUG [ExecuteMethodInterceptor] Invoking Teste.upload(UploadedFile

, String)

null

null

19:36:34,820 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelu

m.vraptor.extra.ForwardToDefaultViewInterceptor

19:36:34,825 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Forwar

dToDefaultViewInterceptor

19:36:34,825 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault p

age for this logic

19:36:34,827 DEBUG [VRaptorApplicationContext] Cache miss for interface br.com.c

aelum.vraptor.view.PageResult

19:36:34,844 DEBUG [DefaultPageResult   ] forwarding to /WEB-INF/jsp/teste/uploa

d.jsp

19:36:34,848 DEBUG [VRaptor             ] VRaptor received a new request

19:36:34,854 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExec

ution

19:36:34,855 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Servle

t3MultipartInterceptor

19:36:34,855 DEBUG [Servlet3MultipartInterceptor] Request contains multipart dat

a. Try to parse with Servlet3 Part

19:36:34,856 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor Resour

ceLookupInterceptor

19:36:34,857 DEBUG [DefaultResourceTranslator] trying to access /WEB-INF/jsp/tes

te/upload.jsp

19:36:34,857 DEBUG [VRaptor             ] VRaptor ended the request

19:36:34,858 DEBUG [VRaptor             ] VRaptor ended the request
Lucas_Cavalcanti

o vraptor escolheu o Servlet3MultipartInterceptor

vc tá usando o Tomcat 7?
se sim baixe o snapshot da proxima versão do VRaptor, pois isso é um bug q já foi corrigido:
http://oss.sonatype.org/content/repositories/snapshots/br/com/caelum/vraptor/3.2.1-SNAPSHOT/vraptor-3.2.1-20101214.180111-8.jar

ou tente fazer o deploy no Tomcat 6 (que deve funcionar)

H

Pronto baixei e vou testar (Sim estou usando o tomcat 7) vou aproveitar e testar nos 6 tbm

valeu pela atenção dispensada :shock:

H

Apenas informando que funcionou utilizando o tomcat 7

Sinceros agradecimentos para todos do forum.

Como não foi eu quem abriu o POST não vou colocar como [RESOLVIDO]

G

Isso é um bug na spec do servlet 3, que não deixa claro que Filter devem (ou não) participar de multipart requests.

  1. https://issues.apache.org/bugzilla/show_bug.cgi?id=49711
  2. https://servlet-spec-public.dev.java.net/issues/show_bug.cgi?id=14

Tenho esperanças que até que saia o Tomcat 7 stable o pessoal da Apache seja flexível e libere multipart para filters. O Glassfish 3.0 aceita e funciona muito bem o upload com Servlet 3. Vamos ver o que o pessoal da JBoss vai fazer com o JBoss 6 e 7.

rogerio.alcantara

Salve galera JEDI do VRaptor3!

Meo, o upload de imagem tava rolando belezinha no site, de repente parou de funcionar (?). Agora o UploadedFile da controller só está vindo NULL;

Segue detalhes. O form:
<form id="catalogForm" name="catalogForm" method="post" enctype="multipart/form-data" action="<c:url value="/catalog/point-of-sale/save/" />" >

			<br/>

			<input type="hidden" name="id" id="id" value="<c:out value="${item.id}" />" />

			<label id="lbl_file" for="produtcName"><fmt:message key="catalog.add.item.photo" /></label>
			<input type="file" id="photo" name="photo" /> <br />

			<label id="lbl_produtcName" for="produtcName"><fmt:message key="catalog.add.item.product" /></label>
			<input class="requiered" type="text" id="produtcName" name="produtcName" maxlength="100" value="<c:out value="${item.product.name}" />" /> <br />

			<label id="lbl_code" for="code"><fmt:message key="catalog.add.item.code" /></label>
			<input type="text" id="code" name="code" maxlength="20" value="<c:out value="${item.product.code}" />" /> <br />

			<label id="lbl_price" for="price"><fmt:message key="catalog.add.item.price" /></label>
			<input class="requiered" type="text" id="price" name="price" maxlength="20" value="<fmt:formatNumber value="${item.product.price}" type="currency"/>" /> <br />

			<label id="lbl_specifications" for="specifications"><fmt:message key="catalog.add.item.specs" /></label>
			<textarea class="requiered" id="specifications" name="specifications" style="height: 100px;"><c:out value="${item.product.specification}" /></textarea>
			<br />

			<input type="button" value="<fmt:message key="save" />" style="width: 100px; cursor: pointer;" onclick="JavaScript: $('#catalogForm').submit();;" />
		</form>

O controller:

@Resource
public class CatalogController {

	@Post
	@Path("/catalog/point-of-sale/save/")
	public void save(final String companyName, final Long id, final String code, final String produtcName, final String price, final String specifications, final UploadedFile photo) {

		try {

			final Employee employee = this.getEmployee();

			final InputStream file = (photo == null ? null : photo.getFile());
			final String fileName = (photo == null ? null : photo.getFileName());

			this.catalogService.save(employee, code, produtcName, NumberUtils.getDouble(price), specifications, file, fileName);

			this.getResult().forwardTo(this.getClass())
							.index();

		} catch (final Exception e) {

			this.getResult().include("errors", this.errorsToList(e))
							.forwardTo(this.getClass())
							.form();
		}
	}
}

E do DEBUG gerado:

B2B SITE: 09:57:23,624 DEBUG [VRaptor             ] VRaptor received a new request
B2B SITE: 09:57:23,626 DEBUG [DefaultRequestExecution] executing stack  DefaultRequestExecution
B2B SITE: 09:57:23,648 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
B2B SITE: 09:57:23,648 DEBUG [DefaultResourceTranslator] trying to access /ralcantara/point-of-sale/save/
B2B SITE: 09:57:23,651 DEBUG [VRaptorRequest      ] Setting companyName with [ralcantara]
B2B SITE: 09:57:23,651 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: CatalogController.saveCatalogController.save(String, Long, String, String, String, String, UploadedFile)]
B2B SITE: 09:57:23,655 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
B2B SITE: 09:57:23,656 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor
B2B SITE: 09:57:23,659 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor SiteAuthorizationInterceptor
B2B SITE: 09:57:23,662 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ClassificationInterceptor
B2B SITE: 09:57:23,662 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor SessionLoaderInterceptor
B2B SITE: 09:57:23,685 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
B2B SITE: 09:57:23,698 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Trying to make class for CatalogController$save$703082238$3
B2B SITE: 09:57:23,699 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for CatalogController.save(String, Long, String, String, String, String, UploadedFile) as [companyName, id, code, produtcName, price, specifications, photo]
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Parameter names found for creating type are: [CompanyName, Id, Code, ProdutcName, Price, Specifications, Photo]
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'CompanyName' being defined for type Ljava/lang/String;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'Id' being defined for type Ljava/lang/Long;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'Code' being defined for type Ljava/lang/String;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'ProdutcName' being defined for type Ljava/lang/String;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'Price' being defined for type Ljava/lang/String;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'Specifications' being defined for type Ljava/lang/String;
B2B SITE: 09:57:23,699 DEBUG [AsmBasedTypeCreator ] Method for field 'Photo' being defined for type Lbr/com/caelum/vraptor/interceptor/multipart/UploadedFile;
B2B SITE: 09:57:23,700 DEBUG [AsmBasedTypeCreator ] Methods: [public java.lang.Long CatalogController$save$703082238$3.getId(), public void CatalogController$save$703082238$3.setId(java.lang.Long), public void CatalogController$save$703082238$3.setCode(java.lang.String), public void CatalogController$save$703082238$3.setPrice(java.lang.String), public java.lang.String CatalogController$save$703082238$3.getPrice(), public java.lang.String CatalogController$save$703082238$3.getCode(), public void CatalogController$save$703082238$3.setCompanyName(java.lang.String), public java.lang.String CatalogController$save$703082238$3.getCompanyName(), public void CatalogController$save$703082238$3.setProdutcName(java.lang.String), public java.lang.String CatalogController$save$703082238$3.getProdutcName(), public void CatalogController$save$703082238$3.setSpecifications(java.lang.String), public java.lang.String CatalogController$save$703082238$3.getSpecifications(), public void CatalogController$save$703082238$3.setPhoto(br.com.caelum.vraptor.interceptor.multipart.UploadedFile), public br.com.caelum.vraptor.interceptor.multipart.UploadedFile CatalogController$save$703082238$3.getPhoto()]
B2B SITE: 09:57:23,700 DEBUG [AsmBasedTypeCreator ] Fields: [private java.lang.String CatalogController$save$703082238$3.CompanyName_, private java.lang.Long CatalogController$save$703082238$3.Id_, private java.lang.String CatalogController$save$703082238$3.Code_, private java.lang.String CatalogController$save$703082238$3.ProdutcName_, private java.lang.String CatalogController$save$703082238$3.Price_, private java.lang.String CatalogController$save$703082238$3.Specifications_, private br.com.caelum.vraptor.interceptor.multipart.UploadedFile CatalogController$save$703082238$3.Photo_]
B2B SITE: 09:57:23,700 DEBUG [CacheBasedTypeCreator] cached generic type for method [DefaultResourceMethod: CatalogController.saveCatalogController.save(String, Long, String, String, String, String, UploadedFile)]
B2B SITE: 09:57:23,701 DEBUG [OgnlParametersProvider] Applying id with []
B2B SITE: 09:57:23,701 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.converter.LongConverter
B2B SITE: 09:57:23,707 DEBUG [OgnlParametersProvider] Applying price with [2,200.00]
B2B SITE: 09:57:23,707 DEBUG [OgnlParametersProvider] Applying produtcName with [Mais um teste]
B2B SITE: 09:57:23,708 DEBUG [OgnlParametersProvider] Applying code with [292929]
B2B SITE: 09:57:23,708 DEBUG [OgnlParametersProvider] Applying companyName with [ralcantara]
B2B SITE: 09:57:23,708 DEBUG [OgnlParametersProvider] Applying specifications with [mais um teste]
B2B SITE: 09:57:23,709 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for CatalogController.save(String, Long, String, String, String, String, UploadedFile) as [companyName, id, code, produtcName, price, specifications, photo]
B2B SITE: 09:57:23,709 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: CatalogController.saveCatalogController.save(String, Long, String, String, String, String, UploadedFile)] are [ralcantara, null, 292929, Mais um teste, 2,200.00, mais um teste, null]
B2B SITE: 09:57:23,711 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
B2B SITE: 09:57:23,712 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
B2B SITE: 09:57:23,712 DEBUG [ExecuteMethodInterceptor] Invoking CatalogController.save(String, Long, String, String, String, String, UploadedFile)

Alguma sugestão?

Lucas_Cavalcanti

vc está com o commons-fileupload no classpath?

rogerio.alcantara

Olá Lucas, obrigado pelo retorno.

Sim, estou com o commons-fileupload-1.2.2 no classpath e tb o vraptor-3.2.0.

Alguma sugestão?

rogerio.alcantara

Pessoal, acho que encontrei o problema.

Eu estava fazendo post via jquery assim: $('#meuForm').submit(); E isso não tava rolando. Então mudei para um botão submit dentro do form, e deu certinho. Veja a saída: B2B SITE: 14:34:27,922 DEBUG [VRaptor ] VRaptor received a new request B2B SITE: 14:34:27,924 DEBUG [DefaultRequestExecution] executing stack DefaultRequestExecution B2B SITE: 14:34:27,947 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor CommonsUploadMultipartInterceptor B2B SITE: 14:34:27,947 DEBUG [CommonsUploadMultipartInterceptor] Trying to parse multipart request. B2B SITE: 14:34:28,926 DEBUG [CommonsUploadMultipartInterceptor] Using repository /tmp for file upload B2B SITE: 14:34:28,972 DEBUG [CommonsUploadMultipartInterceptor] Found 6 attributes in the multipart form submission. Parsing them. B2B SITE: 14:34:29,153 DEBUG [VRaptorRequest ] Setting photo with [21850807.jpg] B2B SITE: 14:34:29,153 DEBUG [MultipartItemsProcessor] Uploaded file: photo with [uploadedFile uploadedCompleteName=21850807.jpg uploadedName=21850807.jpg contentType=image/jpeg] B2B SITE: 14:34:29,181 DEBUG [VRaptorRequest ] Setting id with [] B2B SITE: 14:34:29,181 DEBUG [VRaptorRequest ] Setting produtcName with [Mais um teste] B2B SITE: 14:34:29,181 DEBUG [VRaptorRequest ] Setting code with [1292929] B2B SITE: 14:34:29,181 DEBUG [VRaptorRequest ] Setting price with [100.00] B2B SITE: 14:34:29,182 DEBUG [VRaptorRequest ] Setting specifications with [MAIS UM teste,] B2B SITE: 14:34:29,186 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor B2B SITE: 14:34:29,186 DEBUG [DefaultResourceTranslator] trying to access /ralcantara/point-of-sale/save/ B2B SITE: 14:34:29,187 DEBUG [VRaptorRequest ] Setting companyName with [ralcantara] B2B SITE: 14:34:29,188 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: CatalogController.saveCatalogController.save(String, Long, String, String, String, String, UploadedFile)] B2B SITE: 14:34:29,190 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor B2B SITE: 14:34:29,191 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InterceptorListPriorToExecutionExtractor B2B SITE: 14:34:29,193 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor SiteAuthorizationInterceptor B2B SITE: 14:34:29,195 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ClassificationInterceptor B2B SITE: 14:34:29,195 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor SessionLoaderInterceptor B2B SITE: 14:34:29,207 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor B2B SITE: 14:34:29,222 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor B2B SITE: 14:34:29,222 DEBUG [OgnlParametersProvider] Applying id with [] B2B SITE: 14:34:29,223 DEBUG [OgnlParametersProvider] Applying price with [100.00] B2B SITE: 14:34:29,224 DEBUG [OgnlParametersProvider] Applying produtcName with [Mais um teste] B2B SITE: 14:34:29,224 DEBUG [OgnlParametersProvider] Applying code with [1292929] B2B SITE: 14:34:29,224 DEBUG [OgnlParametersProvider] Applying companyName with [ralcantara] B2B SITE: 14:34:29,225 DEBUG [OgnlParametersProvider] Applying photo with [21850807.jpg] B2B SITE: 14:34:29,225 DEBUG [VRaptorApplicationContext] Cache miss for class br.com.caelum.vraptor.interceptor.multipart.UploadedFileConverter B2B SITE: 14:34:29,232 DEBUG [OgnlParametersProvider] Applying specifications with [MAIS UM teste,] B2B SITE: 14:34:29,232 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for CatalogController.save(String, Long, String, String, String, String, UploadedFile) as [companyName, id, code, produtcName, price, specifications, photo] B2B SITE: 14:34:29,232 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: CatalogController.saveCatalogController.save(String, Long, String, String, String, String, UploadedFile)] are [ralcantara, null, 1292929, Mais um teste, 100.00, MAIS UM teste,, [uploadedFile uploadedCompleteName=21850807.jpg uploadedName=21850807.jpg contentType=image/jpeg]] B2B SITE: 14:34:29,235 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor B2B SITE: 14:34:29,236 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor B2B SITE: 14:34:29,236 DEBUG [ExecuteMethodInterceptor] Invoking CatalogController.save(String, Long, String, String, String, String, UploadedFile) B2B SITE: 14:34:29,432 DEBUG [DefaultLogicResult ] Executing CatalogController.index(String) B2B SITE: 14:34:29,588 DEBUG [DefaultLogicResult ] Forwarding to /WEB-INF/jsp/catalog/index.jsp B2B SITE: 14:34:29,611 DEBUG [DefaultStaticContentHandler] Deferring request to container: /WEB-INF/jsp/catalog/index.jsp B2B SITE: 14:34:30,212 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor B2B SITE: 14:34:30,212 DEBUG [ForwardToDefaultViewInterceptor] Request already dispatched and commited somewhere else, not forwarding. B2B SITE: 14:34:30,213 DEBUG [VRaptor ] VRaptor ended the request B2B SITE: 14:34:30,541 DEBUG [DefaultStaticContentHandler] Deferring request to container: /js/action.js

É isso mesmo?

Não tenho como fazer o upload via jQuery?

Na verdade, o q eu queria era manter os dados do form na tela, caso o metédo de inserção desse algum erro de validação. Por isso pensei em ajax.

Lucas_Cavalcanti

se vc não usa o jquery funiciona?

rogerio.alcantara

Cara,

O que acontece é que eu tava tentando fazer o post via $.post do jqiery, e não tava indo.

Dei uma pesquisada na net, e acho q o $.post jquery não suporta upload de arquivo.

Vou deixar como submit normal mesmo, q dá certo… =/

Lucas_Cavalcanti

pra fazer o upload assíncrono, dê uma olhada no jquery uploadify, mas ele usa flash pra fazer isso

G

Se o $.post do jquery manda o enctype para multipart deve funcionar sem problemas.

Lucas_Cavalcanti

acho que não funciona, senão os plugins javascript pra upload não usariam flash (todos usam)

Criado 9 de dezembro de 2010
Ultima resposta 18 de abr. de 2011
Respostas 21
Participantes 5