Grails中的JQuery Datepicker,控制器接收null [英] JQuery Datepicker in Grails, controller receiving null
问题描述
所以,我安装了 http://grails.org/plugin/jquery-ui ,使用JQuery Datepicker而不是默认的Grails datepicker。
问题是,当控制器收到该值时,它将为null,我不知道如何获取值
案例1.我的gsp中有什么:
< input type =textid =fechaEstimadaInicioname =fechaIniciovalue =$ {pasantiaCortaInstance?.fechaInicio}>
fechaEstimadaInicio是我的JQuery Datepicker。
案例2.在JQuery Datepicker之前,我有这样的:
< g:datePicker relativeYears =[ - 7..7]id =fechaEstimadaInicioname =fechaInicioprecision =dayvalue =$ {pasantiaCortaInstance?.fechaInicio}/>
在我的控制器中我尝试过:
@Transactional
pre>
def save(PasantiaCorta pasantiaCortaInstance){
println pasantiaCortaInstance.fechaInicio
}
在案例1中,它给出:
Fri Mar 28 00:00:00 VET 2014
在情况2:null
提前非常感谢你
编辑:
Adavis你的意思是这样的吗?
在taglib实验之前,我的JQuery Datepicker看起来像这样:
< g:field type =textid =fechaDeAprobadaname =fechaDeAprobadavalue =$ {pasantiaCortaInstance .fechaAprobada>< / g:field>
在JSScript中:
...
$(#fechaDeAprobada)。datepicker({
dateFormat:'yy / mm / dd'
});
...
我创建了TagLib,现在而不是g:field I有
< g:jqDatePicker id =fechaDeAprobadaname =fechaDeAprobada/>
但是它仍然打印标签文本,如文本
我没有改变头上的任何东西
EDIT2:
是的,正在使用一个新的example.gsp;但是如果我尝试在静态脚手架中使用它,那么_form.gsp和create.gsp它不起作用。
这是创建中的形式。 gsp
< g:form url =[resource:pasantiaCortaInstance,action:'save']>
< fieldset class =form>
< g:render template =form/>
< / fieldset>
< fieldset class =buttons>
< g:submitButton name =createclass =savevalue =$ {message(code:'default.button.create.label',default:'Create')}/>
< / fieldset>
< g:jqDatePicker id =fechaEstimadaInicioname =fechaInicioclass =datepickervalue =/>
< / g:form>
而在_form.gsp:
< div
class =fieldcontain $ {hasErrors(bean:pasantiaCortaInstance,field:'fechaInicio','error')} required>
< label for =fechaInicio> < g:message
code =pasantiaCorta.fechaInicio.labeldefault =Fecha Inicio/> < span
class =required-indicator> *< / span>
< / label>
< g:jqDatePicker id =fechaEstimadaInicioname =fechaInicioclass =datepickervalue =/>
< / div>
完成后,最后一个问题是必需
解决方案我在我的项目中使用了一个自定义taglib ,这是在线从另一个版本修改的,但它支持日期名称,包括< ,像myClass.fieldName。另一个版本没有。
< g:jqDatePicker name =fechaInicioclass =datepickervalue =/>
class jqueryDatePickerTagLib {
def jqDatePicker = {attrs,body - >
def out = out
def name = attrs.name //该名称属性是标记与grails无缝工作所必需的
def id = attrs.id?:name
def minDate = attrs.minDate
def showDay = attrs.showDay
def val = attrs.value?:''
//创建日期文本字段并支持隐藏文本字段通过grails
out.println< input type = \text\name = \$ {name} \id = \$ {id} \value = \ $ {val} \class = \datepicker input-small\/>
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\/>
//将代码解析为grails所需的隐藏字段
out.println< script type = \text / javascript\> \ $(document ).ready(function(){
out.println\ $(\input [name ='$ {name}'] \)。datepicker({
out。 printlnonClose:function(dateText,inst){
out.println\ $(\input [name ='$ {name}'] \)。attr(\value \\,dateText);
out.println\ $(\input [name ='$ {name} _month'] \)。attr(\value\,new日期(dateText).getMonth()+1);
out.println\ $(\input [name ='$ {name} _day'] \)。attr(\ value \,new Date(dateText).getDate());
out.println\ $(\input [name ='$ {name} _year'] \)attr (\value\,new Date(dateText).getFullYear());
out.println}
//如果要使用jQuery UI自定义事件添加if块一个属性如下
if(minDate!= null){
out.println,
out.printlnminDate:$ {minDate}
}
if(showDay!= null){
out.println,
out.printlnbeforeShowDay:function(date){
out.printlnvar day = date .getDay();
out.printlnreturn [day == $ {showDay},\\];
out.println}
}
out.println});
if(val!=''){
out.println(\\\
)
out 。attr(\value\,new Date('$ {val}')。getMonth(\\ )+1);
out.println\ $(\input [name ='$ {name} _day'] \)。attr(\value\,new Date ('$ {val}')。getDate());
out.println\ $(\input [name ='$ {name} _year'] \)attr \\value\,new Date( '$ {val}')。getFullYear());
}
out.println})< / script>
}
}
So, I installed http://grails.org/plugin/jquery-ui, to use the JQuery Datepicker instead of the default Grails datepicker.
The problem is, when the controller receives the value, It gives null, I dont know how to get the value.
Case 1. What I have in my gsp:
<input type="text" id="fechaEstimadaInicio" name="fechaInicio" value="${pasantiaCortaInstance?.fechaInicio}">
the "fechaEstimadaInicio" is my JQuery Datepicker.
Case 2. Before the JQuery Datepicker, I had this:
<g:datePicker relativeYears="[-7..7]" id="fechaEstimadaInicio" name="fechaInicio" precision="day" value="${pasantiaCortaInstance?.fechaInicio}" />
And in my controller I tried this:
@Transactional def save(PasantiaCorta pasantiaCortaInstance) { println pasantiaCortaInstance.fechaInicio }
In Case 1 it gives: Fri Mar 28 00:00:00 VET 2014
In case 2: null
Thank you very much in advance
EDIT:
Adavis do you mean something like this?
Before the taglib experiment my JQuery Datepicker looked like this:
<g:field type="text" id="fechaDeAprobada" name="fechaDeAprobada" value="${pasantiaCortaInstance?.fechaAprobada}"></g:field>
And in a JSScript:
... $("#fechaDeAprobada").datepicker({ dateFormat : 'yy/mm/dd' }); ...
I created the TagLib, and now instead of the g:field I have
<g:jqDatePicker id="fechaDeAprobada" name="fechaDeAprobada" />
But it still prints the taglib like text I didn't change anything in the head
EDIT2:
Yes it is working with a new example.gsp; but if I try to use it in the static scaffold, the _form.gsp and the create.gsp it doesn't work.
This is the form in the create.gsp
<g:form url="[resource:pasantiaCortaInstance, action:'save']" > <fieldset class="form"> <g:render template="form"/> </fieldset> <fieldset class="buttons"> <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> </fieldset> <g:jqDatePicker id="fechaEstimadaInicio" name="fechaInicio" class="datepicker" value="" /> </g:form>
And in the _form.gsp:
<div class="fieldcontain ${hasErrors(bean: pasantiaCortaInstance, field: 'fechaInicio', 'error')} required"> <label for="fechaInicio"> <g:message code="pasantiaCorta.fechaInicio.label" default="Fecha Inicio" /> <span class="required-indicator">*</span> </label> <g:jqDatePicker id="fechaEstimadaInicio" name="fechaInicio" class="datepicker" value="" /> </div>
Done, the last problem was the "required"
解决方案I use a custom taglib in my project, this was modified from another version online but it supports date names that include "dots", like "myClass.fieldName". The other version didn't.
<g:jqDatePicker name="fechaInicio" class="datepicker" value="" /> class jqueryDatePickerTagLib { def jqDatePicker = {attrs, body -> 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 def val = attrs.value ?: '' //Create date text field and supporting hidden text fields need by grails out.println "<input type=\"text\" name=\"${name}\" id=\"${id}\" value=\"${val}\" class=\"datepicker input-small\"/>" 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\"> \$(document).ready(function(){" out.println "\$(\"input[name='${name}']\").datepicker({" out.println "onClose: function(dateText, inst) {" out.println "\$(\"input[name='${name}']\").attr(\"value\",dateText);" out.println "\$(\"input[name='${name}_month']\").attr(\"value\",new Date(dateText).getMonth() +1);" out.println "\$(\"input[name='${name}_day']\").attr(\"value\",new Date(dateText).getDate());" out.println "\$(\"input[name='${name}_year']\").attr(\"value\",new Date(dateText).getFullYear());" 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 "});" if (val != '') { out.println("\n") out.println "\$(\"input[name='${name}_month']\").attr(\"value\",new Date('${val}').getMonth() +1);" out.println "\$(\"input[name='${name}_day']\").attr(\"value\",new Date('${val}').getDate());" out.println "\$(\"input[name='${name}_year']\").attr(\"value\",new Date('${val}').getFullYear());" } out.println "})</script>" } }
这篇关于Grails中的JQuery Datepicker,控制器接收null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!