Поддержание состояния между страницами в шве - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть страница HTML с критериями поиска и результатами поиска. Нажатие на кнопку поиска будет динамически обновлять результаты на той же странице. У меня есть контроллер для поиска / результатов XML в Page Scope.

В каждой записи в результатах поиска есть кнопка редактирования. Нажатие на кнопку редактирования откроет новую страницу (новый контроллер в области видимости страницы). После редактирования и сохранения я хочу вернуться на страницу критериев поиска с результатами поиска.

Я могу сохранить критерии поиска в сеансе и запросе и отобразить результаты. Я посмотрел на разговор, и я не уверен, что смогу использовать его в этом сценарии?

Есть ли другие идеи, кроме вывода данных в сеанс для этого сценария?

Ответы [ 4 ]

1 голос
/ 22 сентября 2011

Передайте критерии поиска в представление редактирования (но не отображайте их или что-то в этом роде), а затем разрешите представлению редактирования передать его обратно в представление поиска после завершения редактирования.

0 голосов
/ 07 декабря 2011

Если, когда вы говорите «открыть новую страницу», вы имеете в виду переход на другую страницу в том же окне / вкладке браузера, тогда Conversation является идеальным способом хранения состояния поиска.

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

Возможно, вы также захотите настроить поток страниц для управления этой конкретной логикой навигации.

См. официальную документацию .

0 голосов
/ 25 сентября 2011

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

@Scope(ScopeType.SESSION)
@Name("someRandomSearch") 
public class SomeRandomSearch {    
    private SearchObj1 userSelection1;
    private List<SearchObj1> searchCriteriaList1;
    private SearchObj2 userSelection2;
    private List<SearchObj2> searchCriteriaList2;
    private String randomUserInput;
    // getters/setters, some helper classes, cascade dropdown stuff, etc.....

    // clear search criteria
    public void reset(){
         this.userSelection1 = null;
         this.userSelection2 = null;
         this.randomUserInput = null;
    }
}

Просто убедитесь, что в ваших модельных классах реализован метод equals - возможно, это очевидно, но когда я впервые начал использовать Seam, я пропустил этот маленький кусочек, и потребовалось целое время, чтобы понять, почему мы не можем удерживать выпадающие выборки в нашем поиске страниц.

0 голосов
/ 23 сентября 2011

Если вы хотите сохранить данные между двумя страницами, у вас есть много способов:

1) Строковые параметры 2) данные сеанса 3) Долгосрочный разговор 4) Сериализация ваших данных в другом месте (БД или другое).

Поскольку вы говорите о «сохранении», я могу подумать, что вы сохраняете свои данные в базе данных. Если вы каким-то образом сохранили свои данные на второй странице, вы можете просто запросить их.

В противном случае вы можете использовать сеанс и разговор, второй имеет «меньшую» и определенную область видимости. Вы можете решить, когда создать и уничтожить. Просто вставьте в первую страницу pages.xml и создайте bean-компонент с областью диалога.

Область сеанса будет хранить ваши данные в компоненте области сеанса, пока вы не закроете браузер.

Надеюсь, это поможет.

...