2016-03-06 52 views
0

我發現this答案非常有用,但我不明白爲什麼它的作品。
按照API pageContext getRequest()方法返回ServletRequest並且它不包含getUserPrincipal()方法。那麼爲什麼像這樣的工作頁的種類上下文的請求

<c:if test="${not empty pageContext.request.userPrincipal}"> 

    <c:if test="${pageContext.request.isUserInRole('ADMIN')}"> 

     User ${pageContext.request.userPrincipal.name} in ADMIN Group 

    </c:if> 

</c:if> 

是否存在隱式類型轉換或什麼?

回答

3

很久以前,Servlet API已經被設計成可以在不同於web,HTTP上下文的上下文中使用(我認爲當時支持使用這個API的WAP是一個目標)。

實際上,我不知道其他使用servlet API的傳統Java EE webapp上下文的上下文。在這種情況下,所有請求都是HttpServletRequest(它是ServletRequest的子接口)的實例。和this method exists in HttpServletRequest

+0

你說過這一切! – aribeiro

+0

但它爲什麼工作?如果pageContext.request在Java中返回ServletRequest,那麼如果不將其轉換爲HttpServletRequest重要性,則不能使用它的子類的方法。 –

+1

在Java中這將是真實的。但是你發佈的代碼不是Java。它是JSP表達式語言,它是一種更加動態的語言。如果'getFoo()'getter方法在對象'bar'上可用,'bar.foo' EL表達式使用反射調用該getter,而不關心對象的類型。 –