प्रोग्राम के रूप में वर्तमान पृष्ठ


54

जाओ (प्रबंधित बीन, वेल्ड बीन, कोई फर्क नहीं पड़ता), मैं यह मैं पथ देता

FacesContext ctx = FacesContext.getCurrentInstance(); 
String path = ctx.getExternalContext().getRequestContextPath(); 

फोन करके संदर्भ पथ क्लाइंट पर है प्राप्त कर सकते हैं क्लाइंट वर्तमान में /myapplication की तरह पहुंचता है। क्या पृष्ठ, जैसे /home.faces, और कैसे प्राप्त करना संभव है?

102

आप आम तौर पर इस बात के लिए UIViewRoot#getViewId() का उपयोग करना चाहते हैं।

String viewId = facesContext.getViewRoot().getViewId(); 

यह इस प्रकार भी उपलब्ध ईएल में है:

#{view.viewId} 

वास्तव में यह मान नेविगेशन मामले में reuseable जैसे <h:link outcome> और <h:button outcome> परिणाम है।


वैकल्पिक रूप से, आप भी HttpServletRequest#getRequestURI() का उपयोग जो कुछ enduser वास्तव में ब्राउज़र पता पट्टी में देख रही है पाने के लिए कर सकते हैं।

String uri = ((HttpServletRequest) externalContext.getRequest()).getRequestURI(); 

कौन सा भी उपलब्ध इस प्रकार ईएल में है:

#{request.requestURI} 

वास्तव में यह मान <h:outputLink value> या सादे <a href> में reuseable है। ध्यान दें कि आप इसे नेविगेशन केस परिणाम के रूप में उपयोग नहीं कर सकते हैं।

+1

यह मज़बूती से काम नहीं करता। उदाहरण के लिए प्रीटीफेस के साथ यह यूआरएल नहीं देता है जिसे वर्तमान पेज बनाने के लिए बुलाया गया था। 25 mar. 122012-03-25 20:10:58

+1

@DoubleMalt: OP ने इंगित नहीं किया कि वह PrettyFaces का उपयोग कर रहा है। 25 mar. 122012-03-25 20:12:09

+4

हालांकि यह सच है, उन्होंने स्पष्ट रूप से यह भी नहीं बताया कि उन्होंने नहीं किया था। मेरा मुद्दा यह था कि जेएसएफ का विस्तार करने वाले पुस्तकालय आपके समाधान को तोड़ सकते हैं (और प्रीटीफेस एक बहुत ही सामान्य वृद्धि है क्योंकि मानक कार्यान्वयन के नेविगेशन के हैंडलिंग बहुत बेकार है)। मैं सिर्फ उन लोगों को देना चाहता था जो पता लगाते हैं कि आपका साफ समाधान उनके लिए एक सुराग क्यों नहीं काम करता है। 12 apr. 122012-04-12 11:58:49

  0

@DoubleMalt: मैं PrettyFaces नहीं करता, लेकिन मुझे आश्चर्य होगा कि अगर उसका दृश्य हैंडलर किसी नेविगेशन केस परिणाम के लिए उचित यूआरएल निर्धारित नहीं करता है। 02 dec. 122012-12-02 00:56:27

+1

@DoubleMalt, Prettyfaces एक मात्र यूआरएल prettyfier माना जाता है। मानक कार्यान्वयन के नेविगेशन के मानक कार्यान्वयन के आपके कथन का आपका बयान बहुत बेकार है ... अच्छा, सुंदरता नेविगेशन के बारे में कुछ नहीं करता है जो जेएसएफ नहीं करता है। यह सिर्फ अपने यूआरएल को एक सुंदर व्यक्ति के लिए मानचित्र बनाता है। इसमें पैरामीटर से संबंधित कार्यक्षमता भी है, लेकिन मैं उन्हें नेविगेशन विशिष्ट नहीं मानता। 13 jun. 142014-06-13 22:01:34

  0

यह एक अच्छा विचार की तरह लगता है, तथापि HttpServletRequest को getRequest कास्टिंग निम्न त्रुटि फेंक देगा: ClassCastException: com.liferay.portlet.RenderRequestImpl javax.servlet.http.HttpServletRequest में ढाला नहीं जा सकता getRequest (की तरह लगता है) वापस आ जाएगी एक PortletRequestImpl, और मुझे यकीन नहीं है कि इस तरह के वर्ग का उपयोग कर यूआरएल कैसे प्राप्त करें। 20 aug. 142014-08-20 22:41:12

+1

@ गारा: स्पष्ट रूप से आप एक पोर्टल ऐप विकसित कर रहे हैं, एक सर्वलेट ऐप नहीं। क्षमा करें, पोर्टल मेरे बाहर हैं। 'PortletRequest' उदाहरण से अनुरोध यूआरआई कैसे प्राप्त करें, इसके बारे में बस खोज करें। 21 aug. 142014-08-21 05:49:06


12

ठीक, हो गया है, यह

FacesContext ctx = FacesContext.getCurrentInstance(); 
HttpServletRequest servletRequest = (HttpServletRequest) ctx.getExternalContext().getRequest(); 
// returns something like "/myapplication/home.faces" 
String fullURI = servletRequest.getRequestURI(); 

2
String uri = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRequestURI(); 

1
String str = ((HttpServletRequest) FacesContext.getCurrentInstance() 
.getExternalContext().getRequest()).getRequestURI(); 
System.out.println(str); 
+2

कृपया शब्दों में भी अपने उत्तर की व्याख्या करें। 17 feb. 132013-02-17 12:05:56

  0

यह पिछले उत्तरों में कुछ भी नहीं जोड़ता है। 10 jun. 152015-06-10 20:05:47