将参数从视图传递到 Play Framework 上的控制器
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 to post your data back to your controller. In your controller you'd need a second action method that handles this post from your form. Have a look at the Play tutorial about forms and here 几个包含表单处理的旧 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 上有多少日期)
我想将参数从视图传递到控制器,我不知道该怎么做。
这是我的观点:
#{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 to post your data back to your controller. In your controller you'd need a second action method that handles this post from your form. Have a look at the Play tutorial about forms and here 几个包含表单处理的旧 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 上有多少日期)