Заполнить таблицу данных из представления JSF управляемого компонента ESC

Привет, у меня есть View scoped bean, который отвечает за поисковую активность. После того, как пользователь вводит критерии поиска и значение поиска, нажимает кнопку поиска, он заполняет свое одно из свойств типа "Список" результатами поиска, затем переходит на другую страницу, где его результаты поиска отображаются в таблице данных, которая привязана к списку, который собирается содержать. результат поиска. Но всякий раз, когда пользователь выполняет поиск и перезагружает новую страницу, чтобы отобразить результат поиска, инициализируется новый компонент View scoped bean. Поэтому он не может показать таблицу данных с ожидаемыми результатами поиска. Я прочитал несколько вопросов и статей об этом, и это известно потому, что bean-объект вида scoped инициализируется при каждом запросе новой страницы. Как решить эту проблему. Я привязал эту таблицу списка результатов к bean-компонентам (см. Область видимости), так как в этом списке мне нужны результаты поиска.

1 ответ

Решение

Вы выполняете поиск по POST, который не идемпотентен/ не является закладкой. Делайте как Google, используйте GET вместо POST. <f:viewParam> очень помогает в этом. Вот начальный пример:

<f:metadata>
    <f:viewParam id="query" name="query" value="#{bean.query}" />
    <f:event type="preRenderView" listener="#{bean.search}" />
</f:metadata>
...
<form>
    <label for="query">Query</label>
    <input type="text" name="query" value="#{param.query}" />
    <input type="submit" value="Search" />
    <h:message for="query" />
</form>
...
<h:dataTable value="#{bean.results}" var="result" rendered="#{not empty bean.results}">
     ...
</h:dataTable>

В основном это @RequestScoped боб:

private String query;
private List<Result> results;

public void search() {
    results = service.search(query);
}

Когда форма отправлена, вы в конечном итоге получаете строку поискового запроса в URL, что делает ее идемпотентной / закладочной. Обновление запроса приведет к тому же результату.

Другие вопросы по тегам