What did I make wrong with s:link????
german.delacruz Aug 3, 2006 10:36 PMHi people
I've fighting for a couple of days with a page. In a few words, I've a page that has a datatable, and 2 more sections that are rendered each one depending of the selected action
This is my page....
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:s="http://jboss.com/products/seam/taglib"
 template="/WEB-INF/templates/template.xhtml">
<!-- content -->
<ui:define name="content">
<div class="section">
 <h:form id="searchForm">
 <span class="errors"><h:messages globalOnly="true"/></span>
 <h1>Buscar Padron</h1>
 <fieldset>
 <h:inputText value="#{personController.searchString}" style="width: 165px;"/> 
 <h:commandButton value="Buscar Padron" action="personCRUD" styleClass="button"/>
 </fieldset>
 </h:form>
</div>
<div class="section">
<h:form id="dataTableForm">
 <h:outputText value="No se encontraron datos" rendered="#{model != null and model.rowCount==0}"/>
 <br/>
 <s:link value="Crear nuevo" action="#{personEditor.createEntity}" buttonClass="button" linkStyle="button"/>
 <br/>
 <h:dataTable value="#{model}" var="e" rendered="#{model.rowCount>0}">
 <h:column>
 <f:facet name="header">Razon social</f:facet>
 #{e.razonSocial}
 </h:column>
 <h:column>
 <f:facet name="header">CUIT/CUIL</f:facet>
 #{e.fiscalID}
 </h:column>
 <h:column>
 <f:facet name="header">Action</f:facet>
 <h:commandButton action="#{personEditor.displayEntity}" styleClass="button" value="ver"/>
 <h:commandButton action="#{personEditor.updateEntity}" styleClass="button" value="modificar"/>
 <h:commandButton action="#{personEditor.removeEntity}" styleClass="button" value="eliminar"/>
 </h:column>
 </h:dataTable>
</h:form>
</div>
<f:subview rendered="#{personEditor.entity!=null and (personEditor.currentOperation=='DISPLAY' or personEditor.currentOperation=='REMOVE') }">
<div class="section">
 <h1>View Hotel</h1>
</div>
<div class="section">
 <div class="entry">
 <div class="label">CUIT/CUIL</div>
 <div class="output">#{personEditor.entity.fiscalID}</div>
 </div>
 <div class="entry">
 <div class="label">Razon Social:</div>
 <div class="output">#{personEditor.entity.razonSocial}</div>
 </div>
 <div class="entry">
 <div class="label">Nombre Completo:</div>
 <div class="output">#{personEditor.entity.completeName}</div>
 </div>
</div>
<h:form id="staticForm">
<div class="entry">
 <div class="label"><f:verbatim> </f:verbatim></div>
 <div class="input">
 <h:commandButton value="Eliminar" action="#{personEditor.perform}" styleClass="button" rendered="#{personEditor.currentOperation=='REMOVE'}"/> 
 <s:link value="Volver" action="#{personEditor.cleanState}" buttonClass="button" linkStyle="button"/>
 </div>
</div>
</h:form>
</f:subview>
<f:subview rendered="#{personEditor.entity!=null and (personEditor.currentOperation=='UPDATE' or personEditor.currentOperation=='CREATE')}">
<div class="section">
 <h1>View Hotel</h1>
</div>
<h:form id="dynamicForm">
<s:validateAll>
 <div class="entry">
 <div class="label"><h:outputLabel for="fiscalID">CUIT/CUIL:</h:outputLabel></div>
 <div class="input">
 <h:inputText id="fiscalID" value="#{personEditor.entity.fiscalID}" required="true">
 </h:inputText>
 <br/><span class="errors"><h:message for="fiscalID"/></span>
 </div>
 </div>
 <div class="entry">
 <div class="label"><h:outputLabel for="razonSocial">Razon Social</h:outputLabel></div>
 <div class="input">
 <h:inputText id="razonSocial" value="#{personEditor.entity.razonSocial}" required="true">
 </h:inputText>
 <br/><span class="errors"><h:message for="razonSocial"/></span>
 </div>
 </div>
 <div class="entry">
 <div class="label"><h:outputLabel for="completeName">Nombre Completo</h:outputLabel></div>
 <div class="input">
 <h:inputText id="completeName" value="#{personEditor.entity.completeName}" required="true">
 </h:inputText>
 <br/><span class="errors"><h:message for="completeName"/></span>
 </div>
 </div>
 <div class="entry">
 <div class="label"><h:outputLabel for="password">Password:</h:outputLabel></div>
 <div class="input">
 <h:inputSecret id="password" value="#{personEditor.entity.password}" required="true"/><br/>
 <span class="errors"><h:message for="password"/></span>
 </div>
 </div>
</s:validateAll>
<div class="entry errors"><h:messages globalOnly="true"/></div>
<div class="entry">
 <div class="label"><f:verbatim> </f:verbatim></div>
 <div class="input">
 <h:commandButton value="Modificar" action="#{personEditor.perform}" styleClass="button" rendered="#{personEditor.currentOperation=='UPDATE'}"/>
 <h:commandButton value="Crear" action="#{personEditor.perform}" styleClass="button" rendered="#{personEditor.currentOperation=='CREATE'}"/>
  
 <s:link value="Volver" action="#{personEditor.cleanState}" buttonClass="button" linkStyle="button"/>
 </div>
</div>
</h:form>
</f:subview>
</ui:define>
</ui:composition>
As you can see, I've this in my datatable...
 <h:column>
 <f:facet name="header">Action</f:facet>
 <h:commandButton action="#{personEditor.displayEntity}" styleClass="button" value="ver"/>
 <h:commandButton action="#{personEditor.updateEntity}" styleClass="button" value="modificar"/>
 <h:commandButton action="#{personEditor.removeEntity}" styleClass="button" value="eliminar"/>
 </h:column>
If I use a commandButton, everything works like a charm, but, If I change it with...
 <h:column>
 <f:facet name="header">Action</f:facet>
 [<s:link value="ver" action="#{personEditor.displayEntity}"/>]
 [<s:link value="modificar" action="#{personEditor.updateEntity}"/>]
 [<s:link value="eliminar" action="#{personEditor.removeEntity}"/>]
 </h:column>
My dataTableSelection in my PersonFinder never loads (It's null always) then, I can't edit, view or update.
I don't know If you need any more information, I think it's a problem in my page! Anyway, I'll show you my actions anyway
package manchot.actions;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import manchot.model.Person;
import manchot.services.PersonService;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
@Name("personFinder")
@Stateful
@Scope(ScopeType.EVENT)
@LoggedIn
public class PersonFinderBean implements PersonFinder {
 @EJB
 private PersonService personService;
 @DataModel(scope=ScopeType.PAGE)
 private List<Person> model;
 @DataModelSelection
 private Person selected;
 @In(create=true)
 private PersonController personController;
 @Factory("model")
 public void findModel() {
 model = (personService.findByNameLike(personController.getSearchString()));
 }
 public void refresh(){
 findModel();
 }
 @Destroy
 @Remove
 public void destroy() {
 }
 public Person getSelected() {
 return selected;
 }
}
package manchot.actions;
import javax.ejb.EJB;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import manchot.actions.util.Operations;
import manchot.model.Person;
import manchot.services.PersonService;
import org.hibernate.validator.Valid;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
@Name("personEditor")
@Stateful
@LoggedIn
public class PersonEditorBean implements PersonEditor {
 private Operations currentOperation;
 @EJB
 private PersonService personService;
 @In(create=true)
 private PersonFinder personFinder;
 @Valid
 private Person person;
 public Operations getCurrentOperation() {
 return currentOperation;
 }
 public void setCurrentOperation(Operations currentOperation) {
 this.currentOperation = currentOperation;
 }
 @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
 public Person getEntity() {
 return person;
 }
 public void setEntity(Person entity) {
 this.person = entity;
 }
 @Begin(join=true)
 public String displayEntity() {
 setEntity(personFinder.getSelected());
 currentOperation=Operations.DISPLAY;
 return "personCRUD";
 }
 @Begin(join=true)
 public String updateEntity() {
 setEntity(personFinder.getSelected());
 currentOperation=Operations.UPDATE;
 return "personCRUD";
 }
 @Begin(join=true)
 public String createEntity() {
 setEntity(new Person());
 currentOperation=Operations.CREATE;
 return "personCRUD";
 }
 @Begin(join=true)
 public String removeEntity() {
 setEntity(personFinder.getSelected());
 currentOperation=Operations.REMOVE;
 return "personCRUD";
 }
 @End
 public String cleanState() {
 setEntity(null);
 setCurrentOperation(null);
 return "personCRUD";
 }
 @End
 public String perform() {
 if(currentOperation==Operations.REMOVE){
 personService.remove(person);
 }else{
 personService.save(person);
 }
 return cleanState();
 }
 @Destroy
 @Remove
 public void destroy() {
 }
}
package manchot.actions;
import javax.ejb.Remove;
@Name("personController")
@Stateful
@Scope(ScopeType.SESSION)
@LoggedIn
public class PersonControllerBean implements PersonController {
 private String searchString="";
 public String getSearchString() {
 return searchString;
 }
 public void setSearchString(String searchString) {
 this.searchString = searchString;
 }
 @Destroy
 @Remove
 public void destroy() {
 }
}
Thanks!!!
