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