【问题标题】:Avoid script file reloading JSP in Spring避免在 Spring 中重新加载 JSP 脚本文件
【发布时间】:2014-10-11 10:08:14
【问题描述】:

我每 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 很陌生,所以这可能是一个愚蠢的查询,但我还不能破解它。

【问题讨论】:

    标签: javascript jquery spring jsp


    【解决方案1】:

    通过查看您的代码,我假设控制器调用了整个 success.jsp 视图资源(包含脚本)。

    model1.setViewName("success");
    

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

    有用的参考资料:

    【讨论】:

    • 我确实将返回类型更改为 JSOn 但仍然使用脚本加载整个页面......上面我更新了控制器..但我相信你给出了正确的方法,也许我会找出我的代码中还剩下什么
    • 即使现在也不应该使用 Spring Model,因为它们的实例用于通过模板引擎(在您的情况下为 JSP 引擎)呈现 Web 资源(页面)内的动态内容。我建议您使用如下所示的 RESTful Web 服务:spring.io/guides/gs/rest-service。需要明确的是,您必须只发送一个数据流,在这种情况下是一个 JSON 文件,并使用 JavaScript 在客户端呈现其内容。
    猜你喜欢
    • 2018-01-06
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多