3 Replies Latest reply on Aug 1, 2006 1:50 PM by german.delacruz

    Question about passing an action Listener

    german.delacruz

      Hi 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;"/>&#160;
       <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.-