grails - Grails 中的 JQuery Datepicker, Controller 接收 null

标签 grails datepicker

所以,我安装了http://grails.org/plugin/jquery-ui ,使用 JQuery Datepicker 而不是默认的 Grails datepicker。

问题是,当 Controller 接收到值时,它给出null,我不知道如何获取该值。

案例 1. 我的 gsp 中有什么:

<input type="text" id="fechaEstimadaInicio" name="fechaInicio" value="${pasantiaCortaInstance?.fechaInicio}">

“fechaEstimadaInicio”是我的 JQuery Datepicker。

案例 2. 在使用 JQuery Datepicker 之前,我有这样的:

    <g:datePicker relativeYears="[-7..7]" id="fechaEstimadaInicio" name="fechaInicio" precision="day"  value="${pasantiaCortaInstance?.fechaInicio}"  />

在我的 Controller 中我尝试了这个:

 @Transactional
    def save(PasantiaCorta pasantiaCortaInstance) {
        println pasantiaCortaInstance.fechaInicio
}

在案例 1 中,它给出: 2014 年 3 月 28 日星期五 00:00:00 VET

情况 2:空

提前非常感谢

编辑:

Adavis 你的意思是这样的吗?

在 taglib 实验之前,我的 JQuery Datepicker 看起来像这样:

<g:field type="text" id="fechaDeAprobada" name="fechaDeAprobada" value="${pasantiaCortaInstance?.fechaAprobada}"></g:field>

在 JSScript 中:

...
        $("#fechaDeAprobada").datepicker({
            dateFormat : 'yy/mm/dd'

        });
...

我创建了 TagLib,现在我使用的是 g:field

<g:jqDatePicker id="fechaDeAprobada" name="fechaDeAprobada" />

但它仍然像文本一样打印标签库 我没有改变任何东西

编辑2:

是的,它正在使用新的 example.gsp;但如果我尝试在静态脚手架中使用它,_form.gsp 和 create.gsp 就不起作用。

这是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>

在 _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>

完成,最后一个问题是“必需的”

最佳答案

我在我的项目中使用自定义标签库,这是从另一个在线版本修改的,但它支持包含“点”的日期名称,例如“myClass .fieldName”。另一个版本没有。

<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 - Grails 中的 JQuery Datepicker, Controller 接收 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718198/

相关文章:

unit-testing - Controller 测试中的 Grails 4.0 模拟服务方法

javascript - Grails 谷歌地图可视化

javascript - 无法允许日期采用 dd/mmm/yyyy

javascript - jquery datepicker change event trigger 和 input 的默认 change event

jquery - Angular 2 日期选择器组件可以禁用特定日期

jQuery ui datepicker向下滚动网页时定位问题

jquery - 日期选择器导航图标问题

grails - 删除之前与多对多关系

grails - 如何访问 Controller 外部的 url(或 grails 参数)?

grails - Grails 可以编写响应吗?