JSF/Bean binding dropped when using s:link
thatrichard Jun 12, 2007 8:48 AMShort version: When I navigate using an s:link then any data entered into form fields disappears. Everything works ok when I use commandLinks.
Long version:
I've created a tabbed form using a conversation. The user moves between tabs by clicking on links. At any time, the user can persist the form data by pressing a Save button.
Here is the Session Bean and JSF pages (the first JSF page creates the tabs, the second creates a tab which is inserted into the first).
Note that I've duplicated the tab links. The link with the 2 appended is implemented with commandLink and the second one with s:link.
If I use the commandLinks, everthing behaves as expected. I can navigate between the tabs and enter data. When I hit save the data is persisted. However, when I use the s:links then the data disappears. For example, if I enter a last name and then navigate to the second tab and back, the last name has disappeared.
Does anyone know what is going on?
Richard
@Name("personEditor")
@Stateful
@Scope(ScopeType.CONVERSATION)
@Conversational
public class PersonEditorBean implements PersonEditor {
private Person person;
@In
private Session session;
@Logger
private Log log;
@In(required=false)
public void setPerson(Person person) {
this.person = person;
}
@Out
public Person getPerson() {
if (person == null) {
person = new Person();
}
return person;
}
@Begin(flushMode=FlushModeType.MANUAL, join=true)
public String enterIdentity() {
return "/forms/party/person/identity";
}
public String enterBanking() {
return "/forms/party/person/banking";
}
public void save() {
session.save(person);
session.flush();
}
@Remove @Destroy
public void destroy() { }
}
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Person</title>
</head>
<body>
<ui:composition xmlns:rich="http://richfaces.ajax4jsf.org/rich"
template="person.xhtml">
<ui:define name="tab">
<div name="tabset-actions" />
<div name="tabset-links">
<ul class="tabset" />
</div>
<div class="tab"><ui:insert name="tab" /></div>
<h:outputLabel value="Title" for="title" />
<h:inputText id="title" value="#{person.title}" />
<h:outputLabel value="Last Name" for="lastName" />
<h:inputText id="lastName" value="#{person.lastName}" />
<h:outputLabel value="Date of Birth" for="dateOfBirth" />
<h:inputText id="dateOfBirth" value="#{person.dateOfBirth}" />
<h:outputLabel value="Preferred Language" for="preferredLanguage" />
<h:inputText id="preferredLanguage"
value="#{person.preferredLanguage}" />
</ui:define>
</ui:composition>
</body>
</html>
<?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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Person</title>
</head>
<body>
<ui:composition xmlns:rich="http://richfaces.ajax4jsf.org/rich"
template="/layout/template.xhtml">
<ui:define name="body">
<h:form id="form">
<div name="tabset-actions"><s:button value="Save"
action="#{personEditor.save}" /></div>
<div name="tabset-links">
<ul class="tabset">
<li><h:commandLink id="identity" value="Identity2"
action="#{personEditor.enterIdentity}" /> <s:link value="Identity"
action="#{personEditor.enterIdentity}" /></li>
<li><h:commandLink id="banking" value="Banking2"
action="#{personEditor.enterBanking}" /> <s:link value="Banking"
action="#{personEditor.enterBanking}" /></li>
</ul>
</div>
<div class="tab"><ui:insert name="tab" /></div>
</h:form>
</ui:define>
</ui:composition>
</body>
</html>
[img][/img]