Salvar Date a partir de um textField
26/06/2012 20:39
0
Olá pessoal, estou com um probleminha aqui, recentemente mudei a forma com que o usuário dá entrada nas datas do formulário e agora não estou conseguindo salvar o dados, dá um erro dizendo que "não é uma data válida". Antes usava o plugin Calendar perfeito com esse código:

gsp:

<calendar:datePicker name="dataAdmissao" dateFormat="%d/%m/%Y" defaultValue="${new Date()}" value="${funcionarioInstance?.dataAdmissao}"/>


controlador:

def save = {
...
String formato = "dd/MM/yyyy"
if(params.dataAdmissao_value){
funcionarioInstance.dataAdmissao = new SimpleDateFormat(formato).parse(params.dataAdmissao_value)
}
funcionarioInstance.save(flush: true)
...
}


Agora estou pegando a data a partir de um imput="text" mas não está salvando.

<input type="text" data-date-format="dd/mm/yyyy" id="datepicker" name="dataAdmissao">


String formato = "dd/MM/yyyy"
if(params.dataAdmissao){
funcionarioInstance.dataAdmissao = new SimpleDateFormat(formato).parse(params.dataAdmissao)
}


Alguém pode me ajudar nisso?
Valeu.


Tags: Date, Calendar


0
Teoricamente o que você postou deveria funcionar.

O params.dataAdmissao está com o valor correto?

De qualquer maneira, em grails tem maneiras mais práticas de converter datas. Nesse link:

http://grails.org/doc/latest/guide/introduction.html#webFeatures

procure por "Easy Date Parsing"
26/06/2012 22:10


0
eu uso dataPicker

<g:textField style="width:80px;" class="datepicker" name="from" value="${params.from}"/>

algumacoisaInstance.data = Date.parse('dd/MM/yyyy', params.from)


css


/* DATEPICKER */
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; background-color: white; border: 1px solid #ccc;}
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; cursor: pointer; color:black}
.ui-datepicker .ui-datepicker-next { right:2px; cursor: pointer; color:black}
.ui-datepicker .ui-datepicker-prev-hover { right:191px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0;}
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; background-color: white}
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; background: url(../images/btn_bg.png) 0 30% white repeat-x;}
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
27/06/2012 14:36


0
rcauler, o params.dataAdmissao está indo para o controlador como uma String do tipo: "27/06/2012".
O "Easy Date Parsing" me parece que é apenas para a nova versão do Grails não?
Eu uso a 1.3.7.

Valeu manthay mas também não funcionou aqui.

Que pode ser gente?
27/06/2012 16:43


0
João acabei de testa na minha gsp tambem retorna uma string 27/06/2012
meu parametro é from
eu faco rq1006Instance.data = Date.parse('dd/MM/yyyy', params.from)

funciona meu atributo é do tipo Date.
27/06/2012 16:55


0
minha versao do grails 1.3.3 bem parecida com a sua!
27/06/2012 16:56


0
manthay, não quer funcionar de jeito algum! hehe
Até já apaguei a tabela do banco e criei novamente, mas não adianta.
O estranho é que em outra view eu uso o mesmo código e funciona. Só que não é para salvar e sim para consultar datas.

Tem mais alguma dica?
27/06/2012 23:02


0
após a conversao tente da um println no valor para ver se ele converteu, vc ja fez isso? e mais caso estaja usando o simpleDate... é necessario usar import.
mas é uma coisa tão simples estranho mesmo nao estar funcionando!
28/06/2012 11:24


0
Sim, está convertendo e já fiz os imports.
Deixa assim, valeu pela atenção.
Obrigado.

ps: se eu conseguir posto aqui.
28/06/2012 18:22


0
Cria uma tag com o código abaixo que seus problemas acabaram.

import br.com.mln.utils.Utils

class DataTagLib {

def data = {attrs, body ->
def classe = ""
if ( attrs.class ){
classe = "class='"+attrs.class+"'"
}

def out = out
def name = attrs.name //The name attribute is required for the tag to work seamlessly with grails
def id = attrs.id ?: name
def minDate = attrs.minDate
def showDay = attrs.showDay

//Create date text field and supporting hidden text fields need by grails
String aux = Utils.getDataComoString(attrs.value, "dd/MM/yyyy")
out.println "<input type=\"text\" name=\"${name}_\" id=\"${id}_\" value=\"${aux}\" ${classe} />"
out.println "<input type=\"hidden\" name=\"${name}\" id=\"${id}\" value=\"data.struct\" />"
out.println "<input type=\"hidden\" name=\"${name}_day\" id=\"${id}_day\" />"
out.println "<input type=\"hidden\" name=\"${name}_month\" id=\"${id}_month\" />"
out.println "<input type=\"hidden\" name=\"${name}_year\" id=\"${id}_year\" />"

//Code to parse selected date into hidden fields required by grails
out.println "<script type=\"text/javascript\"> "
out.println "\$(document).ready(function(){"
if ( attrs.value ){
out.println " \$(\"#${name}_month\").attr(\"value\",\"${Utils.getDataComoString(attrs.value, "MM")}\");"
out.println " \$(\"#${name}_day\").attr(\"value\",\"${Utils.getDataComoString(attrs.value, "dd")}\");"
out.println " \$(\"#${name}_year\").attr(\"value\",\"${Utils.getDataComoString(attrs.value, "yyyy")}\");"
}
out.println " \$(\"#${name}_\").mask(\"99/99/9999\");"
out.println " \$(\"#${name}_\").datepicker({"
out.println " onClose: function(dateText, inst) {"
out.println " var dia = dateText.substring(0, 2); "
out.println " var mes = dateText.substring(3, 5); "
out.println " var ano = dateText.substring(6, 10); "
out.println " \$(\"#${name}_month\").attr(\"value\",mes);"
out.println " \$(\"#${name}_day\").attr(\"value\",dia);"
out.println " \$(\"#${name}_year\").attr(\"value\",ano);"
out.println " }"

//If you want to customize using the jQuery UI events add an if block an attribute as follows
if (minDate != null) {
out.println " ,"
out.println " minDate: ${minDate}"
}

if (showDay != null) {
out.println " ,"
out.println " beforeShowDay: function(date){"
out.println " var day = date.getDay();"
out.println " return [day == ${showDay},\"\"];"
out.println " }"
}
out.println ", changeMonth: true "
out.println ", changeYear: true "
out.println " });"
out.println "})</script>"
}
}



A classe de data acima apenas converte a data de yyyy-MM-dd para dd/MM/yyyy

Espero ter ajudado.
02/07/2012 11:50



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