Мне нужно сделать очень простую вещь - передать текущий URL-адрес со страницы JSF (2.0) на управляемый компонент. Это необходимо для получения URL-адреса формы входа, которая будет перенаправлять пользователя обратно на текущую страницу после входа в систему. (Я использую GAE, а bean-компонент является оболочкой его пользовательского сервиса, если это имеет значение). Любой очевидный способ, который я пробовал, не работает<c:set />
- не работает (без каких-либо сообщений об ошибках или предупреждениях)
геттер, который принимает текущий URL в качестве параметра - не работает.
Так много вопросов и много рецептов, но все сложные и не изящные. Почему? Может я (как и другие спрашивающие) упустил ключевой принцип проектирования? Я буду признателен за любой ответ - простой и понятный рецепт или объяснение, почему этого не нужно делать.
Установить свойство bean со страницы JSF
Ответы (1)
Он доступен по адресу #{request.requestURL}
a> (или, если вам нужен только путь относительно домена, используйте #{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:param
внутри h:commandButton
не работает в JSF 1.x. Вы хотели бы использовать h:commandLink
вместо этого.
Обновить в соответствии с комментариями: я понял, что вы хотели "передать текущий URL-адрес управляемому компоненту". Но на самом деле вы хотите «получить доступ к текущему URL-адресу в управляемом компоненте».
В этом случае либо замените #{param.url}
на #{request.requestURL}
:
@ManagedProperty("#{request.requestURL}")
private String url;
Или получить необработанный HttpServletRequest
из-под капота JSF ExternalContext#getRequest()
:
HttpServletRequest request = (HttpServletRequest) externalContext.getRequest();
String requestURL = request.getRequestURL();
person
BalusC
schedule
13.08.2010
Да, я понимаю, что это сработает, когда пользователь нажмет кнопку отправки. Но могу ли я установить какое-либо свойство компонента без какого-либо взаимодействия с пользователем? Мне нужно инициализировать свойство bean-компонента с конкретным requestURI сразу после получения HTTP-запроса GET и иметь возможность получить другое свойство, которое зависит от requestURI ниже на странице. Является ли это возможным?
- person Max Doronin; 13.08.2010
Да, это была моя вина, извините за двусмысленный вопрос. Теперь оба варианта работают, делаю именно то, что мне нужно! Спасибо BalusC!
- person Max Doronin; 14.08.2010
@Odelya: только когда область действия свойства короче области действия bean-компонента. В этом конкретном примере свойство ограничено запросом, тогда bean-компонент должен быть ограничен запросом, он не может иметь более широкую область действия, чем это.
- person BalusC; 15.08.2010