Как получить текущий абсолютный URL со строкой запроса в JSF?
Я пытаюсь получить абсолютный URL-адрес в прослушивателе действий моего управляемого Боба. Я использовал:
HttpServletRequest#getRequestURL() // returning http://localhost:7101/POSM/pages/catalog-edit
HttpServetRequest#getQueryString() // returning _adf.ctrl-state=gfjk46nd7_9
Но фактический URL-адрес: http://localhost:7101/POSM/pages/catalog-edit?_adf.ctrl-state=gfjk46nd7_9&articleReference=HEN00067&_afrLoop=343543687406787
. Я не знаю, почему параметр artcileReference
опускается.
Есть ли какой-либо метод, который может дать мне весь URL сразу? Как я могу получить весь URL-адрес со всей строкой запроса?
2 ответа:
Вы можете восстановить свой URL вручную с помощью
ServletRequest#getParameterNames()
иServletRequest#getParameter()
, доступных в экземпляреHttpServletRequest
.Вот пример кода, который я использовал в прошлом именно для этой цели:
private String getURL() { Enumeration<String> lParameters; String sParameter; StringBuilder sbURL = new StringBuilder(); Object oRequest = FacesContext.getCurrentInstance().getExternalContext().getRequest(); try { if(oRequest instanceof HttpServletRequest) { sbURL.append(((HttpServletRequest)oRequest).getRequestURL().toString()); lParameters = ((HttpServletRequest)oRequest).getParameterNames(); if(lParameters.hasMoreElements()) { if(!sbURL.toString().contains("?")) { sbURL.append("?"); } else { sbURL.append("&"); } } while(lParameters.hasMoreElements()) { sParameter = lParameters.nextElement(); sbURL.append(sParameter); sbURL.append("="); sbURL.append(URLEncoder.encode(((HttpServletRequest)oRequest).getParameter(sParameter),"UTF-8")); if(lParameters.hasMoreElements()) { sbURL.append("&"); } } } } catch(Exception e) { // Do nothing } return sbURL.toString(); }
Здесь я пришел к своему решению, взяв идею ответа, данного Александром, считая, что
HttpServletRequest#getParameterValues()
Метод:protected String getCurrentURL() throws UnsupportedEncodingException { Enumeration parameters = getServletRequest().getParameterNames(); StringBuffer urlBuffer = new StringBuffer(); urlBuffer.append(getServletRequest().getRequestURL().toString()); if(parameters.hasMoreElements()) { if(!urlBuffer.toString().contains("?")) { urlBuffer.append("?"); } else { urlBuffer.append("&"); } } while(parameters.hasMoreElements()) { String parameter = (String)parameters.nextElement(); String[] parameterValues = getServletRequest().getParameterValues(parameter); if(!CollectionUtils.sizeIsEmpty(parameterValues)) { for(int i = 0; i < parameterValues.length; i++) { String value = parameterValues[i]; if(StringUtils.isNotBlank(value)) { urlBuffer.append(parameter); urlBuffer.append("="); urlBuffer.append(URLEncoder.encode(value, "UTF-8")); if((i + 1) != parameterValues.length) { urlBuffer.append("&"); } } } } if(parameters.hasMoreElements()) { urlBuffer.append("&"); } } return urlBuffer.toString(); }