Распространение строки запроса JSF 2.0 - PullRequest
1 голос
/ 28 января 2011

У меня есть страница, которая получает идентификатор через строку запроса и показывает соответствующую статью.

Я использую <f:viewParams> с событием preRenderView, и данные загружаются из базы данных в методе @PostConstruct:

@Named
@RequestScoped
public class Bean {
    private Long id;

    @PostCostruct
    public void init() {
        if (this.id != null) {
            // load data from db
        }
    }

    public String modify() {
        // update data
    }
}

Когда я вызываю страницу, данные загружаются правильно, но когда я нажимаю кнопку изменения

<h:commandButton value="Modify" action="#{bean.modify}" />

Я получаю сообщение об ошибке, поскольку в компонент не отправляется параметр строки запроса и, следовательно, данные не загружаются.

Как я могу распространить параметры строки запроса?

1 Ответ

1 голос
/ 28 января 2011

afaik, метод modify должен возвращать строку действия, которая заканчивается на «? IncludeViewParams = true».Только после этого распространяются параметры вида (теоретически он должен работать и с Face-include-View-Params, который меньше повреждает глаза при соединении с Face-Redirect).

ADDENDUM: если вам нужно (как указано в комментарии) использовать параметр в вашем методе init, то они не являются - с точки зрения JSF - реальным вводом.Вы не получаете проверку, преобразование и т. Д. Но если вы просто хотите получить необработанное значение, используйте:

@ManagedParam("#{param.id}")
private String id;

// getter and setter for param goes here (obligatory!)

Id будет введен перед вызовом init.Обратите внимание, что это в основном способ обхода viewparams.Вы можете использовать какой-то другой тип, кроме String, но любая ошибка преобразования может привести к исключению, поэтому действительно лучше оставить его в виде строки и выполнить любое преобразование вручную.

Но корень вашей проблемы кажется неправильным@PostConstruct;Вероятно, вы хотите заполнить свою предыдущую фазу, примерно так:

<f:event type="preRenderView" listener="#{beanThatNeedsId.init}"/>  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...