2014-06-24 5 views
0

На моем веб-приложении у меня есть форма с двумя <select>. Один представляет месяц и другой год.Проверить значения перед отправкой документа document.form.action

<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; 
} 

Помощь будет оценена.

Update: я получаю Javascript ошибки: document.reportform.action = "/report.pdf" not defined.

+0

Это не хорошо идея с проверкой запуска с только javascript. Вы тоже должны это делать в контроллере. – dabadaba

+0

Вы уже используете jQuery, тогда почему бы вам не использовать '$ (" # select-input-month "). Val()'? –

+0

Вы на самом деле не говорите, что с ним не так. Можете ли вы объяснить, что он делает или не делает? – Archer

ответ

0
<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'); 
      } 
     }); 
    }); 

Fiddle: 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; 
    } 
} 
+0

Выглядит близко, но я получаю сообщение об ошибке. Метод GET не поддерживается. Я определил как POST, потому что я отправляю данные в фоновый. Есть идеи? – Spacemonkey

+0

+0

Правильно, я забыл изменить метод. Но теперь возникает проблема при создании объекта ReportRequest. Предполагается, что параметры отправляются по ответу тела, а не по URL-адресу, не так ли? – Spacemonkey

-1

Использование JQuery это довольно просто:

$(function(){ 
     $('form').submit(function(e){ 
     e.preventDefault(); 
     if($("#select-input-month").val()=='0' || $("#select-input-year").val()=='0') 
     { 
      document.reportform.action = "/report.pdf"; 
     } 
     }); 
    }); 
Смежные вопросы