Spring RenderMapping基于存储在会话中的状态

时间:2012-01-11 16:52:39

标签: spring-mvc

我有一个带有两个渲染方法的控制器,它们采用不同的参数:

class MyController
{
  @RenderMapping
  public void render(@ModelAttribute ClassX param)
  {
    // do some stuff
  }
  @RenderMapping
  public void render2(@ModelAttribute ClassY param)
  {
    // do different stuff
  }
}

当然,上面示例中缺少的是spring的一些规范,以了解要调用的渲染方法。我需要根据当前会话中存储的状态来决定这一点。我不能将它指定为一个简单的注释,可以吗?

另一种想法是这样的:

class MyController2
{
  @RenderMapping
  public void render(RenderRequest request)
  {
    if (request.getPortletSession().getAttribute(...) ...)
    {
      ClassX param = retrieveObjectFromRequest(ClassX.class, request);
      // do some stuff
    }
    else
    {
      ClassY param = retrieveObjectFromRequest(ClassY.class, request);
      // do different stuff
    }
  }
}

但在这种情况下......如何实施retrieveObjectFromRequest方法?

1 个答案:

答案 0 :(得分:0)

好的,在滚动Spring的源代码一段时间后,我找到了一种方法来执行retrieveObjectFromRequest部分:

class MyController
{
  @RenderMapping
  public void render(WebRequest webRequest)
  {
    ClassX param = new ClassX();
    new WebRequestDataBinder(param).bind(webRequest); // Fills param's properties.
  }
}