首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Button onClick调用Java方法,直到得到某个结果

Button onClick调用Java方法,直到得到某个结果
EN

Stack Overflow用户
提问于 2011-07-22 03:41:32
回答 2查看 1.7K关注 0票数 1

我完全不熟悉Spring框架(以及大多数web开发),但我正在尝试将一些繁重的Java后端代码连接到一个新的Spring和JSP项目中。我的控制器的handleRequest()在返回我的request.jsp ModelAndView对象之前启动了一个长时间运行的工作线程。在那之后,我希望仍然能够从我的JSP表单与这个控制器交互,以便能够在单击表单中的按钮时调用控制器中的isThreadDone()。基于三个不同的结果,我会相应地重定向。对于我目前的方法,这是可能的吗?这似乎违反了Spring MVC的一些方法,但是我想不出一个好的方法来解决这个问题。如果这里有什么离谱的地方,请原谅我的无知。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-22 06:53:00

看一下Spring @Async注解。如果您使用该注释注释服务层bean,则它将在其自己的线程中运行,从而允许您的控制器线程在调用Service方法后不会中断地运行。让该线程通过synchronous方法在类级别为服务设置一个值,您的控制器代码可以随意检查这些切换,以查看过程是否完成。类似于:

代码语言:javascript
复制
@Service
public myServiceClass {
   private boolean isDone = false;
   public synchronized void setIsDone(boolean isDone) {
      isDone = isDone;
   }
   public synchronized boolean getIsDone() {
      return isDone;
   }
   @Async
   public void myServiceMethod() {
      ...long-running stuff...
      setIsDone(true);
   }

在控制器中:

代码语言:javascript
复制
@Controller
class MyController {
   @RequestMapping
   public kickOffHandlerMethod() {
      myServiceClass.myServiceMethod();
      }
   }
   @RequestMapping
   public dependentHandlerMethod() {
      if(myServiceClass.getIsDone()) {
         ...do something...
      }
   }
}

如果可能有多个请求启动这个过程,那么我会将每个isDone切换保存在一个带有某种标识符的HashMap中。然后线程将更新单独的切换,每个请求一个。

票数 1
EN

Stack Overflow用户

发布于 2011-07-22 03:45:06

好吧,一切皆有可能,对吧?根据您所提供的内容,您可以只保留对线程的引用--可能在HttpSession中--这样当单击按钮收到新请求时,您就可以查询它并返回适当的响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6781776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档