2013-03-27 77 views
0

我有一個SpringController獲取名爲「開始」的搜索/休眠分頁目的的RequestParameter。如果參數爲null,則從零開始並使用JavaScript var'start = {start + 10}'呈現JSP,因此如果用戶單擊「下一個10」按鈕,控制器將獲得'start = 10' 。然後,控制器應該使用'start = {start + 10} = 20來呈現一個JSP,但無論我經過控制器多少次,它仍然是10。 我已經在服務器端和客戶端進行了添加。同樣的事情發生:沒有。 這裏的控制方法:春天MVC-型號屬性參數不刷新上GET

@RequestMapping(value = "/customers", method = RequestMethod.GET) 
public String customersView(@RequestParam(value = "start", required = false) Integer start, ModelMap model) { 
    if (start == null || start <= 0) start = 0; 

    List<Customer> customers = customerService.findAllCustomers(start, pagesize);  
    CustomersForm customersForm = new CustomersForm(); 
    customersForm.setCustomers(customers); 
    start += 10; // I can see a "20" here, actually. 
    model.clear(); 
    model.addAttribute("customersform", customersForm); 
    model.addAttribute("start", start); //This should render a "20" on client side on the first call, but it doesn't. 
    return "customers"; 
} 

這是JSP的相關部分:

<script type="text/javascript"> 
jq(document).ready(function() { 
    jq("#next_20").click(function() { 
     var st = "${start}"; //This gets set OK only first time, i.e., a "10" is rendered. 
     jq.get("customers", 
     { 
      start: st 
     }); 
    }); 
}); 

現在好了,我還添加了這些行到我的servlet上下文,因爲我懷疑它與一些緩存有關(瀏覽器,Tomcat)正在做...

<!-- Disable web cache for GET requests --> 
<mvc:interceptors> 
    <bean id="webContentInterceptor" 
     class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
     <property name="cacheSeconds" value="0" /> 
     <property name="useExpiresHeader" value="true" /> 
     <property name="useCacheControlHeader" value="true" /> 
     <property name="useCacheControlNoStore" value="true" /> 
    </bean> 
</mvc:interceptors> 

就是這樣。當我點擊「next_20」按鈕時,我的控制器被調用,一個「開始」參數被傳遞(10),應該在模型中用「20」代替,但渲染後的頁面仍然有一個「10」。

我在做什麼錯?

乾杯

回答

1

您的來電jq.get是一個Ajax調用不刷新頁面,所以${start} JSTL表達式將不會再次評估。您可以存儲st Ajax調用之外,從Ajax調用,而不是「客戶」迴歸start,並更新st當調用返回:

var st = "${start}"; //This gets set OK only first time, i.e., a "10" is rendered. 

jq("#next_20").click(function() { 

    jq.get("customers", 
     { 
      start: st 
     }, 
     function(newStartValue) { 
      st = newStartValue; 
     } 
    ); 
}); 
+0

謝謝,夥計。我是新來的jQuery和AJAX,我沒有注意到,即使方法請求不刷新頁面...所以這根本不符合我的要求,因爲我需要刷新'客戶'對象列表。我使用PO JavaScript函數調用完成了像onlick =「location.href ='customers?start = ...」'這樣的操作。謝謝。 – Azurlake 2013-03-28 01:14:32