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!!!