Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 如何防止@modeldattribute在方法中实例化日历_Java_Spring_Spring Mvc - Fatal编程技术网

Java 如何防止@modeldattribute在方法中实例化日历

Java 如何防止@modeldattribute在方法中实例化日历,java,spring,spring-mvc,Java,Spring,Spring Mvc,我在控制器中有一个方法: public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result, @HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent) 如您所见,我创建了一个@HttpSessionParam注释,

我在控制器中有一个方法:

public FormValidationResult submitFormAndSendEmail(@Valid ContactForm form, BindingResult result,
  @HttpSessionParam(value = "lastTimeContactFormSent", required = false) Calendar lastTimeContactFormSent)
如您所见,我创建了一个@HttpSessionParam注释,它将从HttpSession获取一个变量,并将其放入指定的方法参数中

然而

在解析参数之前,我收到一个实例化ExceptionConstructorAccessorImpl,因为默认构造函数无法实例化日历

使用给定的stacktrace,我看到“resolveModelAttribute”中的HandlerMethodInvoker导致了实例化

我怎样才能防止这种情况?我不需要实例化,我想使用我自己的WebArgumentResolver来填充方法参数

有什么线索吗

更多信息: 弹簧堆叠跟踪(3.0.4):

我没有看到调试器命中webargumentresolver

参数在我的应用程序上下文(xml)中定义如下:

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="customArgumentResolver" ref="sessionParamResolver"/>
</bean>  

<!--  annotation to resolve httpSession attributes -->
<bean id="sessionParamResolver" class="nl.usgpeople.vakgilde.spring.mvc.extensions.SessionParamArgumentResolver"/>

看起来您的参数解析程序没有启动或没有解析该参数。确保:

  • 您的解析器已正确传递到
    AnnotationHandlerMethodAdapter
  • 如果您的解析器被触发,它将正确解析参数

看起来axtavt部分是对的。WebArgument没有得到解决。但是,它是在xml上下文中正确定义的。那它为什么不起作用呢?

application-context.xml包含一个mvc-context.xml(使用导入标记)。在mvc-context.xml中,我定义了bean等

将bean定义移到mvc-context.xml之外的import标记上方,使Spring“注意”bean并按适当的顺序进行解析

进一步看,只要我的sessionParamResolver bean是在标记上面定义的,它就可以工作。当将我的bean放在这个标记下面时,它不起作用


查看,在第15.12章配置SpringMVC中,据说它将定义一个AnnotationMethodHandlerAdapter。因此,我想预先定义它可以确保它也使用您的CustomArgumentResolver。

我已经在应用程序上下文中定义了它,我已经用它的配置方式更新了我的原始问题。顺便说一句,通过这样做,您将覆盖默认的AnnotationMethodHandlerAdapter。这是spring中的一个bug,请参见此处:,您需要去掉mvc:annotation-driven标记以获得完全控制。在spring 3.1中,这似乎更容易,您可以使用mvc:annotation-driven标记并在自己的解析器中设置(希望如此)。至少它应该适用于转换服务。
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="customArgumentResolver" ref="sessionParamResolver"/>
</bean>  

<!--  annotation to resolve httpSession attributes -->
<bean id="sessionParamResolver" class="nl.usgpeople.vakgilde.spring.mvc.extensions.SessionParamArgumentResolver"/>