Spring MVCにrefer Viewを追加
開発でよく見られる例で、操作が完了したら操作ページに戻ります.
コードで表すと次のようになります.
Spring MVCにはRedirectViewがあるので、referを持っていけばもっと便利です.スプリングが柔軟なので、自分でこの機能を増やしましょう.
Viewインタフェースを実装するには、次の手順に従います.
ViewResolverというインタフェースの例はspringコンテナに複数あり、チェーン構造を構成することができ、最初の処理ができなければ次の処理に渡され、処理されるかすべて失敗するまで処理できない.
ViewResolverインタフェースをもう1つ実装します.
最後に、このviewResolverをプロファイルに宣言します.
これにより、refer:で始まるviewNameは、リクエストが開始されたページにredirectされます.
テストクラスを添付:
コードで表すと次のようになります.
response.sendRedirect(request.getHeader("referer"));
Spring MVCにはRedirectViewがあるので、referを持っていけばもっと便利です.スプリングが柔軟なので、自分でこの機能を増やしましょう.
Viewインタフェースを実装するには、次の手順に従います.
public class RefererRedirectView implements View{
protected static final Log logger = LogFactory.getLog(RefererRedirectView.class);
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#getContentType()
*/
public String getContentType() {
return null;
}
/* (non-Javadoc)
* @see org.springframework.web.servlet.View#render(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public void render(Map model, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String returnUrl = request.getHeader("referer");
if(returnUrl==null || returnUrl.trim().equals("")){
returnUrl = "/";
}
logger.debug("referer url["+returnUrl+"]");
response.sendRedirect(returnUrl);
}
}
ViewResolverというインタフェースの例はspringコンテナに複数あり、チェーン構造を構成することができ、最初の処理ができなければ次の処理に渡され、処理されるかすべて失敗するまで処理できない.
ViewResolverインタフェースをもう1つ実装します.
public class RefererViewResolver implements ViewResolver,Ordered {
protected Log logger = LogFactory.getLog(getClass());
// referer: viewName, ViewResolver
public static final String REFERER_PROFIX = "referer:";
/* (non-Javadoc)
* @see org.springframework.web.servlet.ViewResolver#resolveViewName(java.lang.String, java.util.Locale)
*/
public View resolveViewName(String viewName, Locale locale)
throws Exception {
if (!viewName.startsWith(REFERER_PROFIX)) {
return null;
}
logger.debug("this is referer view.");
return new RefererRedirectView();
}
/* (non-Javadoc)
* @see org.springframework.core.Ordered#getOrder()
*/
public int getOrder() {
return Integer.MAX_VALUE-1;// ViewResolver UrlBasedViewResolver
}
}
最後に、このviewResolverをプロファイルに宣言します.
<bean class="com.........RefererViewResolver"/>
これにより、refer:で始まるviewNameは、リクエストが開始されたページにredirectされます.
テストクラスを添付:
@Controller
public class SomeController {
@RequestMapping("/test_referer.do")
public String referer(){
System.out.println("do some thing ,then return to referer.");
return "referer:";
}
@RequestMapping("/test_test1.do")
public String test1(){
return "front/user/test1";
}
@RequestMapping("/test_test2.do")
public String test2(){
return "front/user/test2";
}
}