Vraptor FileUpload + dados com angularjs

9 respostas
java
J

Ola estou apanhando para fazer um cadastro com upload de imagens ao submeter o formulário os dados não chegam ao controller e não recebo nenhuma exception, já adicionei as bibliotecas necessárias para upload. Segue abaixo códigos. Desde já agradeço.

Estabelecimento.html

> <div class="container">
<form id="form_upload" enctype="multipart/form-data" >
					<div class="col-md-offset-3 col-md-6">
						<div class="title-container">
							<h3 class="title text-center" data-ng-hide="estabelecimento.id" >Cadastre seu estabelecimento</h3>
							<h3 class="title text-center" data-ng-show="estabelecimento.id" >Alterar dados estabelecimento</h3>
							<h4 class="sub-title text-center">É rápido e fácil</h4>
						</div>
						<div class="content-form">
							<div class="form-group">
								<div class="col-md-12">
									<span class="dados-obrigatorios"></span>
									<input class="form-control" placeholder="Nome do Estabelecimento *"
										data-ng-model="estabelecimento.nome" />
								</div>
							</div>
							<div class="form-group" data-ng-hide="mostrarEndereco">
								<label for="txtSigla" class="col-lg-2 control-label">Cep:</label>
								<div class="col-lg-10">
									<input type="text" class="form-control" id="txtSigla" data-ng-model="estabelecimento.endereco.cep" >
								</div>
								<a class="btn btn-primary" data-ng-click="buscarEndereco()">Buscar</a>
							</div>
					
							<div class="form-group" data-ng-show="mostrarEndereco" >
								<div class="row">
									<input type="text" disabled class="field1 disabled state" data-ng-model="estabelecimento.endereco.estado.nome">
									<input type="text" disabled class="field2 disabled city" data-ng-model="estabelecimento.endereco.cidade.nome">
								</div><!-- /.row -->
								<div class="row">
									<input type="text" class="field4 disabled address" disabled placeholder="Digite seu endereço" data-ng-model="estabelecimento.endereco.logradouro" >
									<input id="streetNumber" type="text" class="field5 streetNumber" autofocus="autofocus" placeholder="Nº" data-ng-model="estabelecimento.endereco.numero">
								</div><!-- /.row -->
								<div class="row">
									<span class="radio-holder  field-n7"><a href="#" class="unchecked"></a><input type="checkbox" class="semcompl" value="" data-ng-model="semComplemento" >Sem Complemento</span>
									<input type="text" placeholder="Complemento" class="field-n6 compl semComplId tooltip-example" id="semComplId" maxlength="20" 
									data-helpermessage="apartamento, bloco, condomínio, etc" data-ng-model="estabelecimento.endereco.complemento" data-ng-disabled="semComplemento" >
									<input type="text" placeholder="Ponto de referência" class="field-n8 reference tooltip-example" maxlength="180" 
									data-helpermessage="Lugares ou estabelecimento próximos que facilitem a entrega"><span class="tooltip tooltip-helper" 
									style="position: fixed; top: 436px; left: 895.781px; max-width: 335px; display: none;" data-ng-model="estabelecimento.endereco.pontoReferencia">
									Lugares ou estabelecimentos próximos que facilitem a entrega</span>
								</div><!-- /.row -->
							
						</div>
						<div class="form-group">
								<div class="col-md-6">
									<input class="form-control" placeholder="Estabelecimento abre ás *"
										data-ng-model="estabelecimento.horaAbertura" />
								</div>
								<div class="col-md-6">
									<input class="form-control" placeholder="Estabelecimento fecha ás *"
										data-ng-model="estabelecimento.horaFechamento" />
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="Nome completo do responsável pelo estabelecimento *"
										data-ng-model="estabelecimento.responsavel"/>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="E-mail do responsável pelo estabelecimento *"
										data-ng-model="estabelecimento.emailResponsavel"/>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-6">
						            <label>Cobra taxa de entrega? *:
									    <input type="checkbox" data-ng-model="estabelecimento.cobraEntrega"
									           data-ng-true-value="'Sim'" data-ng-false-value="'Não'">
									   </label>
								</div>
								<div class="col-md-6">
									<input id="taxaEntrega" data-ng-model="estabelecimento.taxaEntrega"
										class="form-control" placeholder="Taxa de entrega (em R$) *"  />
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-6">
						            <label>Distância máxima entrega:
									    <input data-ng-model="estabelecimento.distanciaEntrega">
									   </label>
								</div>
							</div>
							
							<div class="form-group">
								<div class="col-md-12">
									<div class="input-group">
										<input data-file-model="myFile" type="file" />
									    <div class="label label-info">
									      {{ myFile.name }}
									    </div>
								</div>
							</div>
							<div class="form-group">
								<div class="col-md-12">
									<input class="form-control" placeholder="Insira um nome de até 12 letras para ser usado no link do seu estabelecimento"
										data-ng-model="estabelecimento.nomeCurto"  maxlength="12" />
								</div>
							</div>
							
					</div>
				</div>
			</form>
				<div class="form-group">
					<div class="col-md-12">
						<a class="btn btn-primary" data-ng-click="save()">Salvar</a>
					</div>
				</div>
</div>

EstabelecimentoController,js

angular.module(‘app’).controller(‘EstabelecimentoController’, [’$scope’, ‘$http’, ‘$acaoSistema’, ‘$message’, ‘$table’,‘fileService’,‘Upload’,
function($scope, $http, $acaoSistema, $message, $table, fileService, Upload) {

$scope.save = function() {
  var file = fileService[0];
  Upload.upload({
        url: 'estabelecimento/save',
        file: file,
        method: 'POST',
        headers: {'Content-Type': 'multipart/form-data'}, // only for html5
        data: {'estabelecimento': $scope.estabelecimento}
    }).error(function (data) {
    	$message.addMsgInf('faio');
  });

}
}

Código java para upload

@Post

<a class="mention" href="/u/path">@Path</a>(estabelecimento/save)

@Consumes(application/json)

@Secured

public void save(EstabelecimentoTO estabelecimento, UploadedFile file) {

try {

estabelecimentoBO.salvar(estabelecimento);

result.use(Results.http()).body(ResourceMessageUtil.getDescricao(MessageCode.MSG_005)).setStatusCode(200);		

} catch (NegocioException e) {

adicionarMensagemErroNegocio(e);

} catch (Exception e) {

adicionarMensagemErroInesperado(e);

}

}

9 Respostas

C

Qual a versao do vraptor que esta usando?

J

4.1.4

C

Ative o log de debug do vraptor e post a saida do console

J

14:39:22,576 DEBUG [ParametersInstantiator] Conversion errors: []
14:39:22,576 DEBUG [ParametersInstantiator] Parameter values for [DefaultControllerMethod: public void br.com.app.ssd.controller.EstabelecimentoController.save(br.com.app.ssd.to.EstabelecimentoTO,br.com.caelum.vraptor.observer.upload.UploadedFile)] are [br.com.app.ssd.to.EstabelecimentoTO@69d0b721, DefaultUploadedFile{fileName=c.jpg}]
14:39:22,577 DEBUG [CDIBasedContainer ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor
14:39:22,578 DEBUG [CDIBasedContainer ] beans for class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor] with qualifiers [@Any @Default]]
14:39:22,579 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor$Proxy$_$$WeldClientProxy
14:39:22,579 DEBUG [CDIBasedContainer ] asking cdi to get instance for class br.com.caelum.vraptor.interceptor.FlashInterceptor
14:39:22,579 DEBUG [CDIBasedContainer ] beans for class br.com.caelum.vraptor.interceptor.FlashInterceptor is [Managed Bean [class br.com.caelum.vraptor.interceptor.FlashInterceptor] with qualifiers [@Any @Default]]
14:39:22,580 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor$Proxy$
$$_WeldClientProxy
14:39:22,584 DEBUG [ExecuteMethod ] Invoking public void br.com.app.ssd.controller.EstabelecimentoController.save(br.com.app.ssd.to.EstabelecimentoTO,br.com.caelum.vraptor.observer.upload.UploadedFile)
14:39:31,224 DEBUG [DefaultControllerTranslator] trying to access /resources/js/angular/angular.js
14:39:31,225 DEBUG [VRaptor ] VRaptor ended the request
14:39:32,370 DEBUG [DefaultResult ] including attribute vmessages: br.com.caelum.vraptor.validator.Messages@160527d9
14:39:32,371 DEBUG [CDIBasedContainer ] asking cdi to get instance for interface br.com.caelum.vraptor.view.HttpResult
14:39:32,371 DEBUG [CDIBasedContainer ] beans for interface br.com.caelum.vraptor.view.HttpResult is [Managed Bean [class br.com.caelum.vraptor.view.DefaultHttpResult] with qualifiers [@Any @Default]]
14:39:32,371 DEBUG [DefaultInterceptorStack] All registered interceptors have been called. End of VRaptor Request Execution.
14:39:32,371 DEBUG [ForwardToDefaultView] Request already dispatched and commited somewhere else, not forwarding.
14:39:32,371 DEBUG [VRaptor ] VRaptor ended the request

C

Aqui mostra que voce esta recebendo o arquivo.

Coloque um breakpoint no method save e veja como esta o file.

J

Correto, o arquivo está preenchido não está chegando os dados.

C

o atribute file esta null?

C

Altere o valor do model data-file-model=“myFile” para data-file-model=“file” e tenta novamente

J

Os dados do modelo que não estão chegado, apenas os do arquivo. Alguma ideia do por que disso?

Criado 11 de março de 2016
Ultima resposta 14 de mar. de 2016
Respostas 9
Participantes 2