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

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

Что я хочу знать, есть ли способ передать объект со страницы A на страницу B без передачи идентификатора пассажира и записи преобразователя или без передачи идентификатора, а затем перейти в БД, чтобы получить пассажира. Я делаю и работаю следующим образом. Я устанавливаю в области flash с помощью 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 bean-компонента pageB

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

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


person SaGiTaRiO    schedule 24.08.2014    source источник


Ответы (1)


Зависит от того, хотите ли вы, чтобы запрос /editClientes был идемпотентным (добавляемым в закладки) или нет.

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

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

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

Смотрите также:

person BalusC    schedule 24.08.2014