避免脚本文件在Spring中重新加载JSP

时间:2014-10-11 10:08:15

标签: javascript jquery spring jsp

我每10秒钟重新加载一个JSP页面,我意识到每次重新加载脚本文件并增加大小,最后我的页面崩溃。

这是我重新加载的jsp和脚本 -

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<%
//JSP code
long ts = (new Date()).getTime(); //Used to prevent JS/CSS caching
%>
<title>Login Success</title>
<link href="assets/css/bootstrap-united.css?<%=ts %>" rel="stylesheet" />
<link href="assets/css/customtable.css?<%=ts %>" rel="stylesheet" />

    <script src="bootstrap/js/jquery-1.11.1.min.js?<%=ts %>"></script>  
    <script src="bootstrap/js/bootstrap.js?<%=ts %>">
    </script>

</head>
<body>
<div id="buntha">


<div class="navbar navbar-default">

    <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse"
            data-target=".navbar-responsive-collapse">
            <span class="icon-bar"></span> <span class="icon-bar"></span> <span
                class="icon-bar"></span>
        </button>
    </div>

    <div class="navbar-collapse collapse navbar-responsive-collapse">
        <form class="navbar-form navbar-right">
            <input type="text" class="form-control" placeholder="Search">
        </form>
        <ul class="nav navbar-nav navbar-right">
            <li><a href=".index.html">Home</a></li>
            <li><a href="signup.html">Signup</a></li>
            <li class="active"><a href="login.html">Login</a></li>
            <li class="dropdown"><a href="#" class="dropdown-toggle"
                data-toggle="dropdown">Explore<b class="caret"></b></a>
                <ul class="dropdown-menu">
                    <li><a href="#">Contact us</a></li>
                    <li class="divider"></li>
                    <li><a href="#">Further Actions</a></li>
                </ul></li>
        </ul>
    </div>
    <!-- /.nav-collapse -->
</div>

我的脚本重新加载 -

<script type="text/javascript">
    var url = '/Motion/success.html'

    $(document).ready(function() {      
        $.ajaxSetup({ cache: false }); 
        var username = '';
        var password = '';                  
        var cubename = '';  
        var status = 'load';

    setInterval(function() {
                $("#buntha").load('/Motion/success.html',
                    {username:'<%=userName%>',password:'<%=Password%>',status:status})
                    .fadeIn("slow");
                }, 10000);

    });

</script> 

和我的Controller Post方法 -

将控制器更改为返回JSON

@RequestMapping(value="/success", method=RequestMethod.POST,headers="Accept=*/*")
public Model success(@Valid @ModelAttribute("username") String username,@Valid @ModelAttribute("password") String password,@Valid String cubename,@Valid String status, BindingResult result,Model model) {     
    log.info("Posting Data in Success With "+username+" passowrd "+password+" Cubename "+cubename+" status "+status);

    boolean found = studentService.findByLogin(username, password);
    if (found) {        
        if(cubename != null)
            updateDataBaseContent(username,cubename,status);

        StudentLogin studentLogin = new StudentLogin(); 
        studentLogin.setUserName(username);
        studentLogin.setPassword(password);
        List<Cube> cubes = cubeService.getCubes();
        model.addAttribute("name", studentLogin);
        model.addAttribute("message", cubes);       
    } 
    return model;
}

如何避免重新加载所有脚本文件 我无论如何只调用div标签加载,但为什么加载netire页面。 我是Spring和Web的新手,所以它可能是一个愚蠢的查询,但我还无法破解它。

1 个答案:

答案 0 :(得分:2)

通过观察你的代码,我想控制器会调用整个success.jsp视图资源(包含脚本)。

model1.setViewName("success");

一个好的解决方案可能是将控制器设置为响应生成器,例如使用 JSON 作为 MediaType 并通过 JQuery 为了管理 AJAX 请求/回复。

Sequence

有用的参考文献: