2015-05-13 4 views
0

Мне нужен совет JSF 2.1.29. У меня есть фасоль:Как продлить срок службы компонента?

public class PlayerCardBean{ 

    private Integer playerId; 
    //GET, SET, Other fileds and methods 
} 

facelet playerCard.xhtml для компонента содержит <a> тег для перенаправления на другую страницу:

<a href="javascript://" 
    onclick="openPage('#{request.contextPath}/panels/playerExternalTransactionList.html?playerId=#{playerCardBean.playerId}');"> 
     <h:outputText value="#msgs['playerCard.externalTransactionList.all']}" /> 
</a> 

Мне нужен этот боб пребывания alived, когда пользователь находится на playerCard.xhtml, а также мы перенаправляем из playerCard.xhtml по ссылке в теге <a>.

Объем обзора меньше. Боб будет уничтожен после перенаправления.

Как я могу сохранить этот компонент в живых, когда мы перенаправляем эти два вида? К тегу <a> и, вероятно, к «обратной» кнопке в браузере.

Я думаю, что хранение полей в сеансе не является хорошей идеей, потому что они не являются атрибутами истинной сессии.

+0

Не взломать его таким образом. Вы не должны быть заинтересованы в том, чтобы сохранить весь бобин в живых, но при отправке параметров из одного компонента в другой. Просто передайте их в качестве параметров запроса или поместите их в область флэш-памяти. –

+0

@XtremeBiker Это понятно, правильно. Но как я могу обрабатывать обратную связь в браузере? –

+0

Этот вопрос обсуждался ранее: http://stackoverflow.com/questions/10305718/avoid-back-button-on-jsf-web-application. В принципе, получите контроль над тем, что вы хотите избежать кеширования. –

ответ

2

я могу думать о следующих двух решений:

  1. Используйте рамки разговора. Это требует аннотации вашего компонента с аннотацией @ConversationScoped, и вам необходимо будет управлять (начинать и заканчивать) разговор программно. (This answer содержит некоторый полезный пример кода.)
  2. Используйте Flash.
+0

Я нахожусь на tomcat, поэтому не могу использовать CDI так же просто. Но я использую весенний фанкорк. Может быть, я смогу с ней поработать? –

2

Вы можете использовать @ConversationScope. Этот объем запускается и заканчивается программно. http://www.byteslounge.com/tutorials/java-ee-cdi-conversationscoped-example

+0

Я не на полном контейнере javaee. Я использую tomcat. –

+0

Вы не можете перезагрузить свойства на playerId? В JSF 2.2 есть @FlowScope http://www.javabeat.net/jsf-2-flowscoped/ – jklee

+0

Что значит перезагрузка? Ну, я не собираюсь переходить на JSF 2.2. –

Смежные вопросы