Question about passing an action Listener
german.delacruz Aug 1, 2006 7:55 AMHi people
I'm very new to seam (Actually, I've using it for 2 weeks). I've read all the documentation I found, I reviewed all the examples.
Nowadays, I'm making my first complete crud. I must say that I've been using tapestry since 2002, then I think my main problem is trying to solve all the problems in the tapestry way.
In my application I've using EJB3, Seam and facelets for the view. I've been using a SFSB with Session scope for the actions. I'm using it with session scope because When I go to any action from the table I lost the last search results (Because the default is a temporal conversation). I can't use a long conversation because in a crud it haven't an end This is my code...
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.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Out; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Unwrap; import org.jboss.seam.annotations.datamodel.DataModel; import org.jboss.seam.annotations.datamodel.DataModelSelection; @Name("personController") @Stateful @Scope(ScopeType.SESSION) @LoggedIn public class PersonControllerBean implements PersonController { private String searchString; @EJB private PersonService personService; // private List<Person> model; @DataModelSelection private Person selected; private Person entity; public Person getEntity() { return entity; } public void setEntity(Person entity) { this.entity = entity; } public String getSearchString() { return searchString; } public Person getSelected() { return selected; } public void setSearchString(String searchString) { this.searchString = searchString; } public void setSelected(Person selected) { this.selected = selected; } @DataModel("model") public List<Person> getModel() { return (personService.findByNameLike(searchString)); //return "personCRUD"; } public String select() { setEntity(getSelected()); // setSelected(personService.merge( getSelected())); return "personCRUD"; } public String clearSelected() { setEntity(null); return "personCRUD"; } @Destroy @Remove public void destroy() { } }
An this is my xhtml
<!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> <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> <h:outputText value="No se encontraron datos" rendered="#{model != null and model.rowCount==0}"/> <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> <s:link value="View" action="#{personController.select}"/> </h:column> </h:dataTable> </h:form> </div> <h:panelGroup rendered="#{personController.entity!=null}"> <div class="section"> <h1>View Hotel</h1> </div> <div class="section"> <div class="entry"> <div class="label">CUIT/CUIL</div> <div class="output">#{personController.entity.fiscalID}</div> </div> <div class="entry"> <div class="label">Razon Social:</div> <div class="output">#{personController.entity.razonSocial}</div> </div> <div class="entry"> <div class="label">Nombre Completo:</div> <div class="output">#{personController.entity.completeName}</div> </div> </div> <h:form> <div class="section"> <h:commandButton value="Ok" action="#{personController.clearSelected}" styleClass="button"/> </div> </h:form> </h:panelGroup> </ui:define> </ui:composition>
Then, I've some questions...
1. What do you think of my code?
2. I can't make a "redirect" with a button from xhtml. When I write a search String I want to redirect to the same page only for reloading the model. How can I make it?
2. My model (I've put and @DataModel in a getter) is never in the session, isn't it? I mean, by now, I don't want to put in in the session, I want to recalculate in any request. Since it's an internal application the DB isn't a problem. But my session size is a problem.
3. I want to make a editor component for this entity. I'm thinking in another facelet templeate this a param to call it with the action to execute. How can I make it?
That's all!
thanks!
German.-