2013-04-03 36 views
2

正在使用Spring MVC框架並使用view preparer來加載菜單。我需要在viewpreparer類中獲取請求對象。對於這是使用以下代碼在視圖preparer如何在viewpreparer類中獲取HttpServletRequest

@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(); 
} 
} 

我需要執行方法中的請求對象。但所有我都在null中獲取請求對象。所以得到一個例外。誰能告訴我如何得到它?

在此先感謝。

+1

http://stackoverflow.com/questions/15779374/apache-tiles-how-to-get-httpservlet-request-object-in-execute-method-of-viewprThis問題已經提出,但沒有答案,但。 – Akshar

+0

但答案不起作用。 –

回答

0

你有沒有試過?

public class MenuPreparer implements ViewPreparer { 


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

    HttpServletRequest request = (HttpServletRequest) tilesContext.getRequest(); 
} 
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(); 
} 

讓我知道它是否工作。

1

如果你使用Spring Security有瓷磚在一起,那就試試這個代碼:

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()); 
    } 

這個工作對我來說。

P.S. ImpossibleException是我對不可能情況的自定義異常。我不知道這是不是真的不可能,但無論如何,例外是所有需要的信息。而這個變體絕對比其他人好。

相關問題