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] 
     
    