Grails中的JQuery Datepicker,控制器接收null [英] JQuery Datepicker in Grails, controller receiving null

查看:106
本文介绍了Grails中的JQuery Datepicker,控制器接收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 
def save(PasantiaCorta pasantiaCortaInstance){
println pasantiaCortaInstance.fechaInicio
}
pre>

在案例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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆