Stworzyłem sobie coś takiego:
FirstPage.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Scope - testowanie</title>
</h:head>
<h:body>
<h:form id="testForm" >
<p:outputLabel for="session" value="Session" />
<p:inputText id="session" size="20" value="#{mySession.session}"/> <br />
<p:outputLabel for="view" value="View" />
<p:inputText id="view" size="20" value="#{myView.view}"/> <br />
<p:outputLabel for="request" value="Request" />
<p:inputText id="request" size="20" value="#{MyRequest.request}" /> <br />
<p:outputLabel for="none" value="None" />
<p:inputText id="none" size="20" value="#{myNone.none}" /> <br />
<p:commandButton ajax="false" value="Save value" /> <br/>
<p:link value="First Page" outcome="FirstPage.xhtml?faces-redirect=true" /> <br/>
<p:link value="Second Page" outcome="SecondPage.xhtml?faces-redirect=true" /><br/>
<h:outputText value="Session" /> <br/>
<h:outputText value="#{mySession.session}" /><br/>
<h:outputText value="View" /> <br/>
<h:outputText value="#{myView.view}" /><br/>
<h:outputText value="Request" /> <br/>
<h:outputText value="#{MyRequest.request}" /><br/>
<h:outputText value="None" /> <br/>
<h:outputText value="#{myNone.none}" /><br/>
</h:form>
</h:body>
</html>
SecondPage.xhtml
<?xml version="1.0" encoding="UTF-8"?>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Scope - testowanie</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</h:head>
<h:body>
<h:outputText value="Druga strona" /><br/>
<h:outputText value="Session" /> <br/>
<h:outputText value="#{mySession.session}" /><br/>
<h:outputText value="View" /> <br/>
<h:outputText value="#{myView.view}" /><br/>
<h:outputText value="Request" /> <br/>
<h:outputText value="#{MyRequest.request}" /> <br/>
<h:outputText value="None" /> <br/>
<h:outputText value="#{myNone.none}" /><br/>
<p:link value="First Page" outcome="FirstPage.xhtml?faces-redirect=true" /> <br/>
<p:link value="Second Page" outcome="SecondPage.xhtml?faces-redirect=true" /><br/>
</h:body>
</html>
Ziarna (każe wygląda tak samo tylko inna adnotacja i nazwa):
@ManagedBean (name = "mySession")
@SessionScoped
public class Session implements Serializable{
private String session = "S - domyślna wartość";
/**
* Creates a new instance of Session
*/
public Session() {
}
public String getSession() {
return session;
}
public void setSession(String session) {
this.session = session;
}
}
Wnioski:
@SessonScoped
działa tak długo jak mam otwartą przeglądarkę - mogę otwerać nowe karty a i tak session będzie cały czas aktywna.
Aby móc pobierać wartości z sesji w javie trzeba je najpierw zapisać "setAttribute" - szczególnie podczas robia panelu logowania
@ViewScoped
działa tylko na aktualnej stronie,przejśćie do innej strony pobiera domyślną wartość, otworzenie nowej karty, odświeżenie strony robi to samo
@NoneScoped
Sam nie wiem ile on trwa, po kliknięcu w przcisk od razu się ustawia na domyślną wartość
@Application Scoped
http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml
Ten tam użyty @ApplicationScope
Jest on użyty po to aby uzupełnić tabelę losowymi wartościami - niby już wiem kiedy to używać