Установить свойство bean-компонента со страницы JSF - PullRequest
1 голос
/ 13 августа 2010

Мне нужно сделать очень простую вещь - передать текущий URL со страницы JSF (2.0) управляемому бину.Это необходимо для получения URL-адреса формы входа в систему, которая перенаправит пользователя на текущую страницу после входа в систему.(Я использую GAE, и bean-компонент - это оболочка вокруг его пользовательского сервиса, если это имеет значение).Любой очевидный способ, который я попробовал, не работает
<c:set /> - не работает (без каких-либо сообщений об ошибках или предупреждений)
getter, который принимает текущий URL в качестве параметра - не работает.Так много вопросов и много рецептов, но все они сложные и не элегантные.Зачем?Может быть, я (как и другие, кто спрашивает) пропустил ключевой принцип дизайна?Я буду признателен за любой ответ - простой и понятный рецепт или объяснение, почему бы не сделать это.

1 Ответ

1 голос
/ 13 августа 2010

Доступно по #{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: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();
...