Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC和应用程序上下文多次刷新尝试_Java_Hibernate_Spring Mvc - Fatal编程技术网

Java Spring MVC和应用程序上下文多次刷新尝试

Java Spring MVC和应用程序上下文多次刷新尝试,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,概念是我们可以创建一个spring应用程序,而不需要XML文件,因此请使用java配置文件指出一些解决方案 我正在创建一个示例web mvc应用程序,作为概念证明。我遇到了一个问题,即一旦提交了表单,就无法使用表单再次提交。它给出了这个错误 GenericApplicationContext does not support multiple refresh attempts: just call 'refresh' once 我知道我的问题在哪里,但我似乎找不到解决办法 Controller

概念是我们可以创建一个spring应用程序,而不需要XML文件,因此请使用java配置文件指出一些解决方案

我正在创建一个示例web mvc应用程序,作为概念证明。我遇到了一个问题,即一旦提交了表单,就无法使用表单再次提交。它给出了这个错误

GenericApplicationContext does not support multiple refresh attempts: just call 'refresh' once
我知道我的问题在哪里,但我似乎找不到解决办法

Controller.java

 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();

//@TODO hibernate broke validity
//@TODO disable submit until data is valid
@RequestMapping(value="form", method=RequestMethod.POST)
public String submitForm(@ModelAttribute @Valid Subscriber subscriber,BindingResult result, Model m) {
    m.addAttribute("message", "Successfully saved person: " + subscriber.toString());
    ctx.register(WebConfiguration.class);
    //@TODO fix refresher only once issue
    ctx.refresh();
    SubscriberDao sao = ctx.getBean(SubscriberDao.class);
    sao.savePerson(subscriber);
    return "formPage";
}
如果你看这里,每次我转到URL时都会调用ctx.refresh。 我尝试将其放入构造函数中,但没有成功。如果这是错误的,谁能帮助我找到解决方案/更好的替代方案。

这是一个由两部分组成的答案。 我已经发现,当我们尝试在RequestMapping中刷新上下文时,问题的一个组成部分。但这不是真正的解决方案。真正的解决方案是声明一个WebApplicationInitializer,我仍然需要处理它

我离题了

解决方案:

将AnnotationConfigApplicationContext替换为AnnotationConfigWebApplicationContext,这样可以使上述代码正常工作

但建议花更多的时间,了解WebApplicationInitializer从长远来看是如何实现的这是一个由两部分组成的答案。 我已经发现,当我们尝试在RequestMapping中刷新上下文时,问题的一个组成部分。但这不是真正的解决方案。真正的解决方案是声明一个WebApplicationInitializer,我仍然需要处理它

我离题了

解决方案:

将AnnotationConfigApplicationContext替换为AnnotationConfigWebApplicationContext,这样可以使上述代码正常工作


但是建议花更多的时间来理解WebApplicationInitializer是如何长期实现的

请看这篇文章这不是针对测试代码而是针对实际控制员请看这篇文章这不是针对测试代码而是针对实际控制员