浏览器如何处理对操作按钮的多次单击

时间:2014-11-22 11:41:15

标签: java rest web jax-rs

我又回来寻找一个最好的在线解决方案中心的解决方案。

@Path("/user/service")
public class UserFeedService {
    String status = "status_idle";
    String errorStatus = "ok";
    @POST
    @Path("/register")
    @Produces("application/json")
    public String register() {
       if (!status.equals("status_running")) {
            registerUser();
            return errorStatus ;
       }
       return status ;
    }

    public void resgisterUser() {
        synchronized {
           status = "status_running"
        }
        //code below
    }
}

上面的代码是我正在处理的restful服务的示例代码,只需单击按钮即可从我的vaadin应用程序调用该代码。

现在我想要的是当用户第一次调用Web服务并且状态设置为"status_running"时单击按钮,以防用户在上一次服务调用时再次单击该按钮仍在进行中,服务应返回“status_running”,该状态将显示给用户。

但上面的代码总是会返回errorStatus,并且在按钮上多次点击时无法按预期显示。

我在这里做错了什么或浏览器是如何工作的,也就是等待按钮完成后第一次调用服务然后调用

1 个答案:

答案 0 :(得分:0)

您的问题的简单答案是UserFeedService可能在每个请求上重新创建,因此status属性是每个请求的不同默认实例(即每个请求始终为“status_idle”)请求)。将其更改为static应该会导致您请求的行为。

然而,这是一个非常糟糕的想法将这样的静态状态引入RESTful服务。不仅难以测试和调试。如果您确实只希望一次只能进行一次“注册”,那么将状态外部化为某种数据存储会更好。