2010-08-13 63 views
1

我需要做很簡單的事情 - 將當前URL從JSF(2.0)頁面傳遞到託管bean。這需要獲取登錄表單的URL,它將在登錄後將用戶重定向回當前頁面。 (我使用GAE,如果它確實很重要的話,bean就是用戶服務的包裝)。我試過的任何顯而易見的方式都不起作用
<c:set /> - 不起作用(沒有任何錯誤或警告信息)
將當前URL作爲參數的getter不起作用。
這麼多的問題和許多食譜,但都是複雜的,不優雅。爲什麼?可能我(像其他人一樣)錯過了一個關鍵的設計原則?我會感謝任何答案 - 簡單而直接的配方或解釋爲什麼不這樣做。從JSF頁面設置bean屬性頁面

回答

1

它可以由#{request.requestURL}(或者如果你只想要域相對路徑,使用#{request.requestURI})。使用f:param來傳遞它,並使用@ManagedProperty來處理它。

<h:commandButton action="#{bean.submit}" value="submit"> 
    <f:param name="url" value="#{request.requestURL}" /> 
</h:commandButton> 

@ManagedProperty("#{param.url}") 
private String url; 

注意到應該是f:paramh:commandButton不JSF 1.x中工作您想改用h:commandLink


更新按照評論:我明白了,你想「通電流的URL託管bean」。但是你實際上想「訪問託管bean中的當前URL」。

在這種情況下,要麼通過#{request.requestURL}更換#{param.url}

@ManagedProperty("#{request.requestURL}") 
private String url; 

或者通過ExternalContext#getRequest()從JSF罩下獲得原始HttpServletRequest實例:

HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
String requestURL = request.getRequestURL(); 
+0

是的,我明白它會工作,當用戶按提交按鈕。但是,我可以設置一些bean屬性,而無需與用戶交互?我需要在收到HTTP GET請求之後使用特定的requestURI初始化一個bean屬性,並能夠獲取其他屬性,這取決於頁面上的requestURI。可能嗎? – 2010-08-13 16:03:39

+0

真的這是可能的。查看更新後的答案。 – BalusC 2010-08-13 16:22:35

+0

是的,這是我的錯,我很抱歉含糊不清的問題。現在這兩個選項都可以正常工作!謝謝BalusC! – 2010-08-14 01:33:17

相關問題