Como funciona o parametro
22/12/2013 10:46
0
Bom, sou novo no grails e estou tendo problemas em passar um parametro adicional por respond.

Estou usando scaffold dinamico e notei que em /src/templates/scaffolding/create.gsp ha o seguinte trecho de código:

<g:form action="save" <%= multiPart ? ' enctype="multipart/form-data"' : '' %>>
...
</g:form>


Portanto para que eu possa enviar arquivos a partir dessa form, basta setar a variável "multipart".

Então sobrecarreguei a closure create dentro da minha controller para:

def create() {
respond new Classe(params), model:[multiPart: true]
}


Porem, nada mudou em minha view.

Adicionando em create.gsp ${multipart}, o valor null é printado.
O que estou fazendo errado?

OBS: Desculpem se cometi algum erro conceitual, ainda estou "migrando" do java :)
Tags: respond multipart


0
Desculpem, esqueci o titulo...
Como faço para edita-lo?
22/12/2013 10:47


0
Olá, Yago.

Amigo, basta que dentro de seu <g:form> tenha um campo do tipo file que o Grails faz a "mágica" e bota o "multipart" na tag "form" gerada.


0
Bom, não é esse o resultado que estou obtendo.
Pensei que poderia ser causado pelo "fields plugin" então inseri o seguinte código em /src/templates/scaffolding/create.gsp:

<g:form action="save" <%= multiPart ? ' enctype="multipart/form-data"' : '' %>>
<input type="file" /> <!-- TESTE -->
<fieldset class="form">
<f:all bean="${propertyName}"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="\${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>


como resposta obtive:

<form action="/sistema/imagem/save" method="post" >
<input type="file" />
<fieldset class="form">
<div class='fieldcontain required'>
<label for='titulo'>Titulo
<span class='required-indicator'>*</span>
</label><input type="text" name="titulo" value="" required="" maxlength="128" id="titulo" />
</div><div class='fieldcontain required'>
<label for='uriArquivo'>Uri Arquivo
<span class='required-indicator'>*</span>
</label><input type="file" name="uriArquivo" />

</div>
</fieldset>
<fieldset class="buttons">
<input type="submit" name="create" class="save" value="Criar" id="create" />
</fieldset>
</form>


Estou fazendo algo errado?
22/12/2013 23:08


0
Amigo, agora que entendi teu caso.

Bem, o scaffolding do Grails gera um formulário multipart quando um dos campos da classe de domínio é byte[]. Pra esse tipo tenho certeza. Para o tipo File já não tenho certeza.

Pode postar o código da classe GORM a partir da qual usou o scaffolding?


0
Eis minha classe de domínio:


class Imagem {
String titulo

String uriArquivo

static constraints = {
titulo(blank:false, size: 1..128)
uriArquivo()
categorias()
}

String toString(){
titulo
}
}


Bom, não estou utilizando nem byte[] nem File e sim uma String.
Por isso a necessidade de setar manualmente a variavel multipart.
Alguma ideia?
03/01/2014 10:55


0
Yago,
qual versão do grails você está usando? esse "multipart" foi definido por você?
Observei que na sua domain existe "categorias" em "static constraints" mas não foi definido nenhum atributo "categorias", tente remove-lo ou defini-lo. Talvez o grails pode estar interpretando ele como byte por você não ter definido.
03/01/2014 14:37


0
Yago, agora entendi melhor o "multipart", ele está no create.gsp do scaffolding ^^, não sei te dizer o que ele faz ou para que serve.
de qq forma dê uma olhada nesse atributo "categorias".
03/01/2014 14:44


0
Yago, não entendi... a "uriArquivo" será usada para quê? Pelo nome não parece que é o conteúdo do arquivo.

Não entendi sua abordagem ^^'


0
Dyego, desculpe, acabei omitindo parte do código, causando a confusão:

static hasMany = [categorias:Categoria]

é parte da classe.

Yoshi, minha intenção era colocar o arquivo "upado" em uma pasta no sistema de arquivos com um nome randomico. A uriArquivo serve como referência para esse arquivo.

Andei fazendo alguns testes com o arquivo create.gsp.

Adicionei o seguinte trecho a ImagemController:

def create() {
respond new Imagem(params), model:[teste:"testando..."]
}

Em create.gsp:

...
${teste}
...


Bom, quando rodo meu código e acesso a pagina, ele retorna 404 e no terminal recebo:

| Error 2014-01-09 12:13:39,971 [http-bio-8080-exec-6] ERROR view.ScaffoldingViewResolver - Error generating scaffolded view [/imagem/create]: No such property: teste for class: SimpleTemplateScript8
Message: No such property: teste for class: SimpleTemplateScript8

Aparentemente, não tenho acesso ao model nesse arquivo.
Alguma ideia?
09/01/2014 11:15



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto