2015-12-22 3 views
1

У меня есть метод в одном из моих ManagedBeans, который перенаправляется на другую страницу, также предполагается добавить идентификатор к URL-адресу.Неявная навигация - параметр GET не установлен

Например.

public String editForm(String formId) { 
    return "designer?id=" + formId; 
} 

Я называю это из моей главной странице, как так

<p:menuitem value="View/Edit" icon="ui-icon-search" 
    action="#{formsView.editForm(formsView.selectedForm.id)}" /> 

Тогда у меня есть @ViewScoped компонент, который используется на странице дизайнера, и в это @PostConstruct у меня есть что-то вроде этого

@PostConstruct 
public void init() { 
    Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
    String formId = params.get("id"); 
    ... 
} 

Однако ключ ключа не отображается в параметрах Map, что я делаю неправильно?

ответ

2

... который будет перенаправлять на другую страницу ...

Вы на самом деле не выполняет редирект. Вы выполняете форвард. Фактически вы не создаете новый HTTP-запрос с параметром в нем. Вы показываете целевую страницу в ответе HTTP того же самого HTTP-запроса, в котором вы сейчас находитесь. Чтобы узнать разницу, перейдите на What is the difference between redirect and navigation/forward and when to use what?

Вам необходимо выполнить реальную переадресацию. Вам нужно создать новый HTTP-запрос. Вы можете сделать это, добавив предопределенный параметр faces-redirect=true в строку запроса.

public String editForm(String formId) { 
    return "designer?faces-redirect=true&id=" + formId; 
} 

Вы можете подтвердить свою работу, просмотрев адресную строку браузера. Параметр id должен появиться там, чтобы он попал в карту параметров запроса.

Если вы, однако, намерены скрыть его от URL-адреса, и, таким образом, вы действительно не хотели вообще выполнять перенаправление, а являетесь истинным переадресацией, то вам следует искать другой подход для передачи данных: Pass an object between @ViewScoped beans without using GET params.

Смежные вопросы