0

検索/休止状態のページネーションの目的で、「開始」という名前の RequestParameter を取得する SpringController があります。パラメータが null の場合は、ゼロから開始し、JavaScript var 'start = {start + 10}' を使用して JSP をレンダリングするだけでよいため、ユーザーが「次の 10」ボタンをクリックすると、コントローラは「start = 10」を取得します。 . 次に、コントローラーは 'start = {start + 10} = 20 で JSP をレンダリングする必要がありますが、何度コントローラーを通過しても 10 のままです。サーバー側とクライアント側の両方に追加しました。同じことが起こります: 何もありません。コントローラーメソッドは次のとおりです。

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

さて、これらの行もサーブレットコンテキストに追加しました。これは、一部の部分(ブラウザ、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」があります。

私は何を間違っていますか?

乾杯

4

1 に答える 1

1

jq.get への呼び出しは、ページを更新しない ajax 呼び出しであるため、${start}jstl 式は再度評価されません。stajax 呼び出しの外部に保存startし、「customers」の代わりに ajax 呼び出しから戻り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;
        }
    );
});
于 2013-03-27T15:15:42.627 に答える