2009-12-21 100 views
0

我希望用戶被重定向到的login.jsp如果存儲在session範圍內的「角色」不與請求參數「accessRole」重定向:包括

HomePage.jsp

匹配如預期
<jsp:include page="Header.jsp"> 
<jsp:param value="d" name="accessRole" /> 
</jsp:include> 

header.jsp中

<c:if test="${sessionScope.role!=param.accessRole}"> 
<c:redirect url="Login.jsp"/> 
</c:if> 

上面的代碼不進行重定向。

我試着用ExternalContext的redirect()和jsp:forward代替< c:重定向>,但沒有任何效果。

回答

0

你不能在JSP include內部重定向,通常已經太晚了。如果您已經閱讀了應用程序服務器日誌,則應該看到一個IllegalStateException: response already committed(僅僅是因爲父頁面的內容已發送到響應)。

真正的解決方案是實現一個Filter,它映射到覆蓋父頁面的url-pattern

+0

這確實讓我感到驚訝。 「」是有原因的,但它對我來說似乎非常有限。 – skaffman 2009-12-21 12:38:22

+0

在響應的前2KB內(即在父JSP頁面的頂部),您可能會碰運氣。但的確,這有點多餘,我也從來沒有使用過它。 – BalusC 2009-12-21 12:49:08

+0

我正在使用JSF,而不是JSP。 是否有關於如何使用JSF ..過濾器的教程? – TheLameProgrammer 2009-12-21 16:11:50

0

JSP包含的不是允許發送重定向。你必須使用:

<jsp:include.directive file="url"/>