Wicket可以同时处理同一会话中同一页面的两个请求吗?

时间:2010-07-14 14:16:15

标签: java session servlets concurrency wicket

当我点击链接1然后,在收到回复之前,点击同一页面上的链接2,我从Wicket收到“Page Expired”错误。 Wicket概念是否能够进行这样的并发处理?

为什么Wicket失去会话的任何想法(虽然它似乎驻留在tomcat上)?

1 个答案:

答案 0 :(得分:2)

要自己回答这个问题:看起来Wicket处理第二个链接点击没有问题,而第一个链接点击仍在进行处理。我尝试了以下示例。

import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

public class ConcurrentClickPage extends WebPage {

    public ConcurrentClickPage() {
        final IModel<String> model = new Model<String>("initial");
        Label status = new Label("status", model);
        add(status);
        add(new Link("link1"){
            @Override
            public void onClick() {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(ConcurrentClickPage.class.getName()).log(Level.SEVERE, null, ex);
                }
                model.setObject("link 1 clicked");
            }
        });
        add(new Link("link2"){
            @Override
            public void onClick() {
                model.setObject("link 2 clicked");
            }
        });
    }

}

以及相应的html页面:

<html>
  <body>
      <span wicket:id="status">text</span>
      <p>
          <a href="#" wicket:id="link1">Link 1 (deferred processing)</a><br/>
          <a href="#" wicket:id="link2">Link 2</a>
      </p>
  </body>
</html>

当我点击链接1并在等待链接1的响应时单击链接2时,一切正常,我没有“页面过期”错误。