接下來可能會發生兩個問題:
- java.lang.NoSuchMethodException:原因是一般Action method不太會特別製作interface,預設Spring AOP會以interfaces為準,此時AOP proxy就不會有Action method,那麼就會發生此問題。
- Missing parameters:若Action scope被設定為prototype就會有此問題,因為每個method call都會讓Spring AOP proxy object重新new Action object,這樣之前呼叫過setter的parameter就會遺失。
解決方法:
- 修改@Scope參數
- 在web.xml中添加org.springframework.web.context.request.RequestContextListener
代碼:
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.context.WebApplicationContext;
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.web.context.WebApplicationContext;
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
web.xml
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>