2

我正在使用 Spring MVC 框架并使用视图准备器来加载菜单。我需要在 viewpreparer 类中获取请求对象。为此,我在视图准备器中使用以下代码

@Service
public class MenuViewPreparer implements ViewPreparer {


   HttpServletRequest request = ServletActionContext.getRequest();
  // HttpSession session = request.getSession();
 public void execute(TilesRequestContext tilesContext,
         AttributeContext attributeContext) throws PreparerException {

         // MenuList fetches the list of all the main menus by calling the getMenuList() method present in MenuServiceDAOImpl
         // which is of type MenuDTO
         String user=null;
         System.out.println("Menu :"+request.hashCode());
         UserDTO userDTO = UserName.getUserName(request);
         user=userDTO.getUserId();
}
}

我需要执行方法中的请求对象。但所有人都以空值进入请求对象。所以得到一个例外。谁能告诉我如何得到它?

提前致谢。

4

3 回答 3

1

如果您将磁贴与弹簧安全性一起使用,请尝试以下代码:

    Object reqObj = tilesRequestContext.getRequestObjects()[0];
    ServletRequest reqq;
    if (SecurityContextHolderAwareRequestWrapper.class.isInstance(reqObj)) {
        SecurityContextHolderAwareRequestWrapper schaqw = (SecurityContextHolderAwareRequestWrapper) reqObj;
        reqq = schaqw.getRequest();
    } else if(PageContext.class.isInstance(reqObj)){
        PageContext context = (PageContext) reqObj;
        reqq = context.getRequest();
    } else {
        throw new ImpossibleException("tilesRequestContext.getRequestObjects[0] has unknow type: "+ reqObj.getClass().getName());
    }

这对我有用。

PS ImpossibleException 是我在不可能的情况下的自定义异常。我不知道这是否真的不可能,但无论如何例外都是必需的信息。而且这个变种肯定比其他变种更好。

于 2013-10-09T07:24:01.700 回答
0

由于tilesContext.getRequest() 似乎已被弃用,我被迫寻找替代方案。以下对我有用:

Object[] requests = (Object[]) tilesContext.getRequestObjects();
PageContext pageContext = null;
HttpServletRequest request = null;
if(requests.length > 0){
     pageContext = (PageContext) requests[0];
     request = (HttpServletRequest) pageContext.getRequest();
}

让我知道它是否有效。

于 2013-06-18T12:59:50.823 回答
0

你有没有尝试过 ??

public class MenuPreparer implements ViewPreparer {


public void execute(TilesRequestContext tilesContext, 
                  AttributeContext attributeContext) throws PreparerException {

    HttpServletRequest request = (HttpServletRequest) tilesContext.getRequest();
}
于 2013-04-04T10:12:26.223 回答