Как передавать объекты с одной страницы на другую страницу в JSF без записи конвертера

в первую очередь извините за мой английский. У меня есть две страницы в JSF2, одна для перечисления Пассажиров, а другая - для создания/обновления пассажиров. У меня также есть два @ViewScoped beans, один со списком пассажиров и один для удержания на странице B выбранного пассажира. Я вижу способы передать пассажиру через viewParam или @ManagedProperty, но я не хочу писать конвертер.

Что я хочу знать, есть ли способ передать объект со страницы А на страницу Б без передачи идентификатора пассажира и написать конвертер или без передачи идентификатора, а затем перейти в БД для извлечения пассажира. То, что я делаю и работаю, следующее. Я установил в области флэш-памяти через setPropertyActionListener выделенный объект и перейдите на страницу B, в @PostConstruct viewScopedBean, я получаю flashScope и извлекаю объект. Как я уже сказал, это работает, но я не знаю, правильно ли это. Вот код Страница A:

<p:column width="10" style="text-align: center;">                    
    <p:commandButton icon="ui-icon-pencil" action="editClientes?faces-redirect=true">                         
        <f:setPropertyActionListener target="#{flash.pax}" value="#{row}"/> 
     </p:commandButton>
</p:column>

@PostConstruct страницыB bean

@PostConstruct
private void initBean(){          
    this.pax = (Passenger) JSFUtils.getFlashScope().get("pax"); 
    if(this.pax == null){
        this.pax = new Passenger();
    }           
}

Правильно ли это, или правильный способ написать конвертер? Спасибо.

Ответ 1

В зависимости от того, хотите ли вы, чтобы запрос /editClientes был idempotent ( "bookmarkable" ) или нет.

Подход с флэш-памятью не идемпотент. Невозможно связать/поделиться/пометить URL /editClientes, чтобы отредактировать конкретный клиент. Когда конечный пользователь копирует этот URL для совместного использования/закладки и повторно выполняет запрос на него (даже если он просто нажимает [enter] в адресной строке браузера), все, с которым столкнулся конечный пользователь, представляют собой пустую форму редактирования для нового клиента, а не один из которых был выбран конечным пользователем с помощью флэш-области.

Подход параметра запроса является идемпотентным. Конечный пользователь может получить точно тот же ответ каждый раз, когда enduser повторно выполняет запрос.

Это не наше решение, должна ли ваша страница /editClientes быть идемпотентной или нет. Это ваше.

См. также: