在使用document.form.action提交之前检查值

时间:2014-06-24 10:04:52

标签: javascript jquery spring-mvc pdf submit

在我的网络应用程序中,我有一个包含两个<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>

在服务器端,根据在UI上选择的月份和年份生成PDF(使用iTextPdf)。

当月份和年份正确时,PDF会正确生成,但是当用户没有选择正确的月份和年份(其中一个为零)时,我的后端会出现错误。

我想使用javascript代码检查月份或年份是否与0不同,并尽量减少@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.

2 个答案:

答案 0 :(得分: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');
            }
        });
    });

小提琴: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 :(得分:-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";
        }
        });
    });