Upload GAE (Blobstore) entidade chegando null

boneazul, como o Sergio disse, vc vai ter que usar a api do Blobstore diretamente nesse caso, não vai dar pra receber o parâmetro pelo VRaptor…

se vc precisar fazer isso em mais lugares, a gente pode tentar fazer uma alteração no ParametersProvider do VRaptor pra usar o BlobStore para preencher os parâmetros, quando for necessário.

É bem parecido com o seu na verdade. Sem suar upload diretamente mas pela API direto do Blobstore.

@Resource
public class DownloadsController {

	private final Result result;
	private final HttpServletRequest request;
	private final HttpServletResponse response;
	private final Configuracoes config;
	private final BlobstoreService blobstoreService;

	public DownloadsController(BlobstoreService blobstoreService, Result result, 
			HttpServletRequest request, HttpServletResponse response, Configuracoes config) {
		this.blobstoreService = blobstoreService;
		this.result = result;
		this.request = request;
		this.response = response;
		this.config = config;
	}
	
	@Path("/admin/downloads/enviar")
	public void formulario () {
		String uploadUrl = blobstoreService.createUploadUrl("/admin/downloads/upload");
		result.include("uploadUrl", uploadUrl);
	}
	
	@Path("/admin/downloads/upload")
	public void upload () {
		Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request);
                BlobKey blobKey = blobs.get("arquivo");
        
                if (blobKey == null) {
                   result.use(Results.http()).sendError(500);
                } else {
                   result.redirectTo("/admin/");
                }
	}
}

No meu caso eu não faço nada com a BlobKey, apenas vejo se foi criado direitinho.
(depois eu busco diretamente na tabela do Blobstore por um critério meu)

E o form é basicão:

    	<form action="${uploadUrl}" method="post" enctype="multipart/form-data"> 
			<p><input type="file" name="arquivo"></p> 
      		<p><input class="buttons" type="submit" value="Salvar"/></p> 
    	</form> 

Mas o sergio pelo visto seu form não manda nada alem de um arquivo até ai tudo bem funcionaria bem .

Mas no meu caso é um form com uma entidade junto mais o upload de 1 arquivo ate pq eu salvo essa key relacionado com a entidade toda para poder recuperar depois!!

Entendi, é o outro param que vem null, isso?
Na documentação nem parece falar de usar outros params. Nunca usei mesmo.

E se você fizer request.getParamenter na mão, o parâmetro tá lá?

Foi o que pensei, acho que seria uma ótima idéia.

Separe as lógicas e deixe um método somente para o upload. Caso contrário você terá que instanciar manualmente o objeto e setar os valores via request.getParameter. Na documentação do blobstore tem um exemplo do uso do request.getParameter.

[quote=Sergio Lopes]Entendi, é o outro param que vem null, isso?
Na documentação nem parece falar de usar outros params. Nunca usei mesmo.

E se você fizer request.getParamenter na mão, o parâmetro tá lá?
[/quote]

chega null tb se eu tento

request.getParameter(“explicacao.titulo”) chega null tb…isso que tá pegando!!!

Foi o que pensei, acho que seria uma ótima idéia.

Separe as lógicas e deixe um método somente para o upload. Caso contrário você terá que instanciar manualmente o objeto e setar os valores via request.getParameter. Na documentação do blobstore tem um exemplo do uso do request.getParameter.[/quote]

Até ai num tenho problema em instanciar na mao Garcia o problema é que .

request.getParameter(“explicacao.titulo”) ou request.getParameter(“explicacao.descricao”) chega null…o problema ta sendo ai entendeu ??

Testei aqui no meu código que postei antes. E pelo menos localmente funcionou.

Coloquei um parâmetro foo no form e peguei com request.getParameter

[quote=Sergio Lopes]Testei aqui no meu código que postei antes. E pelo menos localmente funcionou.

Coloquei um parâmetro foo no form e peguei com request.getParameter[/quote]

vixi cara entao agora zebrou pra mim chega null…Qual será a diferença de ambientes de nois dois … e pq cargas da agua chega null pra mim será…

Qual versao de vraptor voce esta usando ?? e qual versao de sdk do gae voce usa local ??

Nesse teste estou usando a versao 3.3.1 do vraptor e sdk 1.4.2 do gae

VRaptor 3.3.0 com GAE 1.4.2.
Será problema com o 3.3.1?

pode testar por favor mudando as versões, pra confirmar se é isso?

Estou recriando o form e controller igualzinho o do sergio pra ver com a versão 3.3.0

Funcionou aqui na 3.3.1

Cara criei um projeto zerado so com vraptor-blank-gae 3.3.0 e mesmo assim chega nulll se eu tentar pegar o request …

request.getParameter("foo"); // chega null

A unica diferenca que vi até agora é que voce injeta BlobStoreservice no construtor como voce faz a injecao ??

Eu estou fazendo assim …

this.blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

e voce ja recebe no construtor por outro componente ???

Recriei com seu controller e seu form …

Tenho um ComponentFactory que faz exatamente isso também…

@RequestScoped
@Component
public class BlobstoreServiceComponentFactory implements ComponentFactory&lt;BlobstoreService&gt; {

	public final BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
	
	public BlobstoreService getInstance() {
		return blobstoreService;
	}

}

Lembrei de um detalhe: uso o PicoContainer aqui ao invés do Spring. Seria isso?

Cara troquei pro pico aqui e funcionou…alguma opinião lucas ??

pode ser alguma ordem em que os interceptors passam =/

vc consegue me passar esse projeto zerado que vc usou, pra eu poder testar aqui, por favor?

de qqer forma, principalmente pro gae, se vc não usar nada específico do Spring, é melhor trocar pro pico ou pro guice mesmo, eles são mais rápidos

Abraços

[quote=Lucas Cavalcanti]pode ser alguma ordem em que os interceptors passam =/

vc consegue me passar esse projeto zerado que vc usou, pra eu poder testar aqui, por favor?

de qqer forma, principalmente pro gae, se vc não usar nada específico do Spring, é melhor trocar pro pico ou pro guice mesmo, eles são mais rápidos

Abraços[/quote]

Publiquei aki o projeto que chega null!!

http://www.jslsolucoes.com.br/vraptor-gae-bug.rar

Quanto a trocar o spring pelo pico ou guice seria legal entao o zip do blank ja vir com o pico ou guice por default em vez do spring!!

Abraços e fazendo download me da um toque pra retirar esse projeto do server…

opa, baixei aqui. estou dando uma olhada

valeu