JSF - Jaki jest zasięg pola modelu?

0

Witam.

Mam prosty program z tutorialu JEE od Oracle (pt. "bookmarks") którego działanie w pełni rozumiem, z jednym wyjątkiem.
Oto kod, wyjaśnienie znajduje się poniżej:

Hello.java

package javaeetutorial.bookmarks;

import javax.enterprise.inject.Model;

@Model
public class Hello {

    private String name;

    public Hello() {
    }

    public String getName() {
        return name;
    }

    public void setName(String user_name) {
        this.name = user_name;
    }
}

index.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 lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html">
    <h:head>
        <title>Bookmarkable URL Example</title>
    </h:head>
    <h:body>
        <h:form>
            <h:graphicImage url="#{resource['images:duke.waving.gif']}" 
                            alt="Duke waving his hand"/>
            <h2>Hello, my name is Duke. What's yours?</h2>
            <h:inputText id="username"
                         title="My name is: "
                         value="#{hello.name}"
                         required="true"
                         requiredMessage="Error: A name is required."
                         maxlength="25" />
            <p></p>
            <h:commandButton id="submit" value="Submit" action="response" />
            <h:commandButton id="reset" value="Reset" type="reset" />
        </h:form>
        <div class="messagecolor">
            <h:messages showSummary="true" 
                        showDetail="false"
                        errorStyle="color: #d20005" 
                        infoStyle="color: blue"/>
        </div>
    </h:body>
</html>

response.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 lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Bookmarkable URL Example Response</title>
    </h:head>
    <h:body>
        <h:form>
            <h:graphicImage url="#{resource['images:duke.waving.gif']}" 
                            alt="Duke waving his hand"/>
            <h2>Hello, #{hello.name}!</h2>
            <p>I've made your 
               <h:link outcome="personal" value="personal greeting page!" 
                        includeViewParams="true">
                    <f:param name="Result" value="#{hello.name}"/>
                </h:link>
            </p>
            <h:commandButton id="back" value="Back" action="index" />
        </h:form>
    </h:body>
</html>

personal.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 lang="en"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Bookmarkable URL Example Personal Greeting</title>
    </h:head>
    <f:metadata>
        <f:viewParam name="Result" value="#{hello.name}" />
    </f:metadata>
    <h:body>
        <h2>Your personal greeting from Duke!</h2>
        <p>
            <h:graphicImage url="#{resource['images:duke.waving.gif']}" 
                            alt="Duke waving his hand"/>
            <h:outputText value="Howdy, #{hello.name}!" />
            <h:form>
            </h:form>
        </p>
        <h:form>
            <h:commandButton id="back" 
                             value="Back to Main Page" 
                             action="index" />
        </h:form>
    </h:body>
</html>

Moje pytanie jest takie:
Dlaczego w pliku response.xhtml imię podane w formularzu znajdującym się w index.xhtml</code> potrafi być odczytane bezpośrednio za pomocą #{hello.name}, a w pliku <code>personal.xhtml</code> już nie? Nawet jeśli wyrzucę całkowicie używanie parametru. Wtedy po prostu wyświetli na "spersonalizowanej stronie" puste pole. Oczywiście sytuacja się zmieni kiedy do klasy <code>Hello.java dopiszę np. @named, @SessionScoped oraz zaimplementuję Serializable. Domyślam się, że odpowiedź jest banalnie prosta, ale chyba ze względu na godzinę jakoś nie wpada mi to do głowy, a nie daje mi to spokoju.
Z góry dzięki za pomoc,
Pozdrawiam

1

Adnotacja @Model jest skrótem dwóch adnotacji:

@Named 
@RequestScoped

Zmienna podana w formularzu w pliku index.xhtml jest przekazywana do response.xhtml. W pliku personal.xhtml nie będzie już widoczna, ponieważ klasa Hello ma zasięg requestu (jak już wspomniałem posiada adnotację @Model = @RequestScoped + @named)

1 użytkowników online, w tym zalogowanych: 0, gości: 1