繁体   English   中英

将参数从视图传递到Play框架上的控制器

[英]Passing parameter from view to controller on Play Framework

我想将参数从视图传递到控制器,我不确定该怎么做。

这是我的看法:

#{extends 'crud.html' /}

#{form @DesglosesHorarios.updateValues(), class:"form-horizontal"}
    <div id="add-date">
        <input type="hidden" name="array-fechas" value="" />
        <fieldset>
            Fechas  <input type="date" id="fecha-update" placeholder="Introduce fechas separadas por coma"/>
            <button type="button" id="add-date-button" class="btn btn-primary">Añadir</button>

        </fieldset>
    </div>
    </br>
    <div id="value-dates">
        <ul></ul>
    </div>
    <div id="fecha-error"><ul></ul></div>
    <div class="form-actions">
        <button type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i> &{'save'}</button>
        <a class="btn" href="@{list()}"><i class="icon-remove"></i> &{'cancel'}</a>
    </div>
#{/form}

这是我要在控制器中使用的功能:

public static void updatevalues(String[] fechas) {
        for(String fecha : fechas){
            updateXML(CalendarUtil.formatDate(CalendarUtil.ParseFecha(fecha)));
        }
        render(request.controller + "/updatevalues.html", fechas);

    }

这是我用来捕获数据并将其放入数组的JavaScript代码:

fechas=[]; 

$("#add-date-button").on('click', function(){
    exprfecha = /^([0-9]{2}\/[0-9]{2}\/[0-9]{4})$/;
    values = $("#fecha-update").val().replace( /\s/g,"");
    values = values.split(',');

    errores=[];

    for(i=0; i<values.length; i++){
        if(values[i].match(exprfecha)){
            if(fechas.indexOf(values[i]) == -1){
                fechas.push(values[i]);
                $("#value-dates ul").css("color","green");
                $("#value-dates ul").append('<li>'+values[i]+'</li>');
            }
        }else{
            errores.push(values[i]);
        }
    }

    $("#fecha-error").empty();
    if(errores.length != 0){
        $("#fecha-error").css("color","red");
        for(i=0;i<errores.length;i++){
            $("#fecha-error").append('<li>'+errores[i]+" no tiene el formato adecuado (DD/MM/AAAA).</li>");
        }
    }
});

由于视图是在客户端(浏览器)上运行的,因此可以使用HTTP POST(AJAX或普通)来让服务器端(例如,控制器)知道您的参数。 我看到您使用jQuery,因此可以使用jquery.post将数据发布回控制器。 在您的控制器中,您需要第二种操作方法来处理表单中的帖子。 看一下有关表单Play教程这里还有两个旧的Play示例,其中包括表单处理。

当然。 我认为会有更好的方法来执行此操作,这对于我的案例来说是一种个性化的解决方案,但这对我有用。 我看到params.body给了我这样的字符串: authenticityToken=8a10c96e3b2f16d68eee075e268a6b3886b9bc64&fecha%22=15%2F07%2F2015

因此,我只是在控制器上使用了此params.body,并从字符串中获取了所需的信息并对其进行处理以获得日期。

String [] body = params.get("body").split("=");
String paramfechas = body[2];
paramfechas = paramfechas.replace("%2F", "/").replace("%2C", ",");
List<String> fechas = new ArrayList<String>();
String [] fechas = paramfechas.split(",");

这样,我便以所需的格式(DD / MM / YYYY)获得了日期(或日期,具体取决于params.body上的日期)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM