#javascript #jquery #spring-mvc #pdf #submit
#javascript #jquery #spring-mvc #PDF #Отправить
Вопрос:
В моем веб-приложении у меня есть форма с двумя <select>
. Один представляет месяц, а другой — год.
<form id="reportform" target="_blank">
<table cellpadding="3" cellspacing="14">
<thead>
<th class="report" colspan="2"><spring:message code="label.month"/></th>
<th class="report" colspan="2"><spring:message code="label.year" /></th>
<th colspan="2"></th>
</thead>
<tbody>
<tr>
<td>
<input name="centerId" value="${center.centerId}" type="hidden">
</td>
<td class="date">
<select class="select-input-month-report" id="select-input-month" name="month">
<option selected="selected" value="0"><spring:message code="label.select" /></option>
<option value="1"><spring:message code="label.january" /></option>
<option value="2"><spring:message code="label.february" /></option>
<option value="3"><spring:message code="label.march" /></option>
<option value="4"><spring:message code="label.april" /></option>
<option value="5"><spring:message code="label.may" /></option>
<option value="6"><spring:message code="label.june" /></option>
<option value="7"><spring:message code="label.july" /></option>
<option value="8"><spring:message code="label.august" /></option>
<option value="9"><spring:message code="label.september" /></option>
<option value="10"><spring:message code="label.october" /></option>
<option value="11"><spring:message code="label.november" /></option>
<option value="12"><spring:message code="label.december" /></option>
</select>
</td>
<td></td>
<td class="date">
<select class="select-input-year-report" id="select-input-year" name="year">
<option value="0" selected="selected"><spring:message code="label.select" /></option>
<option value="2013">2013</option>
<option value="2014">2014</option>
</select>
</td>
<td align="right">
<input id="go" class="go" type="submit" value="Report">
</td>
</tr>
</tbody>
</table>
</form>
На стороне сервера PDF генерируется (с использованием iTextPdf
) в соответствии с месяцем и годом, выбранным в пользовательском интерфейсе.
Когда месяц и год указаны правильно, PDF генерируется правильно, но когда пользователь не выбирает правильные месяц и год (один из них равен нулю), я получаю сообщение об ошибке в своем серверной части.
Я хотел бы проверить, что месяц или год отличаются от 0 с помощью кода javascript, и минимизировать изменения в моем @Controller
. Но я не могу проверить значения месяца и года и вызвать серверную службу с помощью document.reportform.action
.
@Controller
public class ReportController {
@RequestMapping(value="/report.pdf", method=RequestMethod.POST)
public ModelAndView getPdfReport(@ModelAttribute ReportRequest request) throws DAOException {
...
return mav;
}
}
Я вызываю сервис следующим образом:
$(function(){
$('form').submit(function(){
var zeros = checkDate();
if(zeros == '0'){
document.reportform.action = "/report.pdf";
}
});
});
function checkDate(){
var zeros = 0;
if(document.getElementById("select-input-month").value == 0){
zeros ;
}
if(document.getElementById("select-input-year").value == 0){
zeros ;
}
return zeros;
}
Помощь будет оценена.
Обновление: я получаю ошибку Javascript: document.reportform.action = "/report.pdf" not defined.
Комментарии:
1. Это не очень хорошая идея с выполнением проверок только с помощью javascript. Вы также должны делать это в контроллере.
2. Вы уже используете jQuery, тогда почему бы вам не использовать
$("#select-input-month").val()
?3. На самом деле вы не говорите, что с этим не так. Можете ли вы объяснить, что он делает или не делает?
4. @DhavalMarthak вы правы, спасибо.
Ответ №1:
<form id="reportform" target="_blank" method="post">
$(function(){
$('form').submit(function(e){
var zeros = checkDate();
if(zeros == '0'){
$(this).attr("action","/report.pdf");
}
else{
e.preventDefault();
alert('Select month and year');
}
});
});
Скрипка: http://jsfiddle.net/URfkN/1 /
@Controller
public class ReportController {
@RequestMapping(value="/report.pdf", method=RequestMethod.POST)
public ModelAndView getPdfReport(@ModelAttribute ReportRequest request, HttpServletRequest httpRequest) throws DAOException {
String month = httpRequest.getParameter("month");
String year= httpRequest.getParameter("year");
....
return mav;
}
}
Комментарии:
1. Выглядит близко, но я получаю сообщение об ошибке ‘GET’ метод не поддерживается. Я определил как POST, потому что я отправляю данные в серверную часть. Есть какие-нибудь идеи?
2. <идентификатор формы =»форма отчета» цель =»_blank» метод =»post»>
3. Верно, я забыл изменить метод. Но теперь у меня возникает проблема при создании объекта ReportRequest. Предполагается, что параметры отправляются в ответ на тело, а не в URL, верно?
4. Я не вижу никакого атрибута модели в вашем html. Возможно, вы можете использовать сам HTTP-запрос.
5. Нет необходимости это делать. Когда я отправляю форму, тело запроса имеет 3 параметра. SpringMVC напрямую создал мой объект ReportRequest (
@ModelAttribute ReportRequest request
). Я проверяю ваше решение, которое может работать, но не настолько умно, чем использование всей мощности SpringMVC.
Ответ №2:
Используя jQuery, это довольно просто:
$(function(){
$('form').submit(function(e){
e.preventDefault();
if($("#select-input-month").val()=='0' || $("#select-input-year").val()=='0')
{
document.reportform.action = "/report.pdf";
}
});
});