3 Replies Latest reply on Mar 20, 2007 2:46 AM by Michael Yuan

    my CRUD way, is it right? show yours please!

    li k Newbie

      jboss-seam-1.2.0
      jboss-4.0.5.GA
      jdk1.5.0_0.8

      the following is my way to do CRUD,it works!
      but I'm not sure if it will cause some potential problems ,like performance.

      please show me yours!

      I like seam so much!

      package org.kaiak.model;
      
      import java.io.Serializable;
      
      import javax.persistence.Entity;
      import javax.persistence.GeneratedValue;
      import javax.persistence.Id;
      import javax.persistence.Table;
      import javax.persistence.Version;
      
      import org.hibernate.validator.Length;
      import org.jboss.seam.annotations.Name;
      
      @Entity
      @Name("permission")
      @Table(name = "t_myor_permission")
      public class Permission implements Serializable {
      
       //seam-gen attributes (you should probably edit these)
       private Long id;
       private Integer version;
       private String name;
      
       //add additional entity attributes
      
       //seam-gen attribute getters/setters with annotations (you probably should edit)
      
       @Id @GeneratedValue
       public Long getId() {
       return id;
       }
      
       public void setId(Long id) {
       this.id = id;
       }
      
       @Version
       public Integer getVersion() {
       return version;
       }
      
       private void setVersion(Integer version) {
       this.version = version;
       }
      
       @Length(max=20)
       public String getName() {
       return name;
       }
      
       public void setName(String name) {
       this.name = name;
       }
      }
      

      package org.kaiak.service;
      
      import javax.ejb.Local;
      
      @Local
      public interface PermissionManager {
       public String persist();
       public String edit();
       public String delete();
       public void findPermissions(); public void destroy();
      
       //add additional interface methods here
      }
      
      package org.kaiak.service;
      
      import java.util.List;
      
      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.persistence.EntityManager;
      
      import org.jboss.seam.annotations.Begin;
      import org.jboss.seam.annotations.Destroy;
      import org.jboss.seam.annotations.End;
      import org.jboss.seam.annotations.Factory;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Out;
      import org.jboss.seam.annotations.datamodel.DataModel;
      import org.jboss.seam.annotations.datamodel.DataModelSelection;
      import org.jboss.seam.core.FacesMessages;
      import org.jboss.seam.log.Log;
      import org.kaiak.model.Permission;
      
      @Stateful
      @Name("permissionManager")
      public class PermissionManagerBean implements PermissionManager {
      
       @Logger
       private Log log;
      
       @In
       FacesMessages facesMessages;
      
       @In
       EntityManager entityManager;
      
       @DataModel
       private List<Permission> permissionList;
      
       @In(required = false)
       @Out(required = false)
       private Permission permission;
      
       @DataModelSelection
       private Permission selectedPermission;
      
       @Begin
       @Factory("permissionList") public void findPermissions() {
       permissionList = entityManager.createQuery(
       "select perm from Permission perm order by perm.id")
       .getResultList();
       }
      
       @End(beforeRedirect = true)
       public String persist() {
       entityManager.persist(permission);
       return "list";
       }
      
       @End(beforeRedirect = true)
       public String delete() {
       permission = selectedPermission;
       permissionList.remove(permission);
       entityManager.remove(permission);
       return "list";
       }
      
       public String edit() {
       if (selectedPermission != null)
       permission = selectedPermission;
       return "form";
       }
      
       @Destroy
       @Remove
       public void destroy() {
       }
      }
      
      


      permissionList.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:s="http://jboss.com/products/seam/taglib"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       template="layout/template.xhtml">
      
      <ui:define name="body">
      
       <h1>permissionList</h1>
       <p>Generated list page</p>
      
       <h:messages globalOnly="true" styleClass="message"/>
      
       <h:outputText value="No permission exists"
       rendered="#{permissionList.rowCount==0}"/>
       <h:dataTable id="permissionList" var="p"
       value="#{permissionList}"
       rendered="#{permissionList.rowCount>0}">
       <h:column>
       <f:facet name="header">Id</f:facet>
       #{p.id}
       </h:column>
       <h:column>
       <f:facet name="header">Name</f:facet>
       <s:link id="permission" value="#{p.name}" action="#{permissionManager.edit}"/>
       </h:column>
       <h:column>
       <f:facet name="header">Action</f:facet>
       <s:link id="user" value="Delete" action="#{permissionManager.delete}"/>
       </h:column>
       </h:dataTable>
      
       <div class="actionButtons"><h3><h:outputText value="#{permission.name}"/></h3>
       <s:button id="done" value="Create permission"
       action="#{permissionManager.edit}"/>
       </div>
      
      </ui:define>
      
      </ui:composition>
      
      
      


      permissionForm.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:s="http://jboss.com/products/seam/taglib"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       template="layout/template.xhtml">
      
      <ui:define name="body">
      
       <h1>permissionForm</h1>
       <p>Generated edit page</p>
      
       <h:messages globalOnly="true" styleClass="message"/>
      
       <h:form id="perm">
       <div class="dialog">
       <s:validateAll>
       <div class="prop">
       <span class="name">Name</span>
       <span class="value">
       <s:decorate>
       <h:inputText id="name" required="true"
       value="#{permission.name}"/>
       </s:decorate>
       </span>
       </div>
       </s:validateAll>
       </div>
       <div class="actionButtons">
       <h:commandButton id="save" value="Save"
       action="#{permissionManager.persist}"/>
       <s:button id="done" value="Done"
       propagation="end" view="/permissionList.xhtml"/>
       </div>
       </h:form>
      
      </ui:define>
      
      </ui:composition>
      
      
      


      pages.xml
      
      <!DOCTYPE pages PUBLIC
       "-//JBoss/Seam Pages Configuration DTD 1.2//EN"
       "http://jboss.com/products/seam/pages-1.2.dtd">
      
      <pages no-conversation-view-id="/home.xhtml"
       login-view-id="/login.xhtml">
      
       <page view-id="*">
       <navigation>
       <rule if-outcome="home">
       <redirect view-id="/home.xhtml"/>
       </rule>
       </navigation>
       </page>
      
       <page view-id="/permissionList.xhtml">
       <navigation>
       <rule if-outcome="list">
       <redirect view-id="/permissionList.xhtml"/>
       </rule>
       <rule if-outcome="form">
       <redirect view-id="/permissionForm.xhtml"/>
       </rule>
       </navigation>
       </page>
      
       <page view-id="/permissionForm.xhtml">
       <navigation>
       <rule if-outcome="list">
       <redirect view-id="/permissionList.xhtml"/>
       </rule>
       </navigation>
       </page>
      
       <exception class="org.jboss.seam.framework.EntityNotFoundException">
       <redirect view-id="/error.xhtml">
       <message>Not found</message>
       </redirect>
       </exception>
      
       <exception class="javax.persistence.EntityNotFoundException">
       <redirect view-id="/error.xhtml">
       <message>Not found</message>
       </redirect>
       </exception>
      
       <exception class="javax.persistence.OptimisticLockException">
       <end-conversation/>
       <redirect view-id="/error.xhtml">
       <message>Another user changed the same data, please try again</message>
       </redirect>
       </exception>
      
       <exception class="org.jboss.seam.security.AuthorizationException">
       <redirect>
       <message>You don't have permission to do this</message>
       </redirect>
       </exception>
      
       <exception class="org.jboss.seam.security.NotLoggedInException">
       <redirect view-id="/login.xhtml">
       <message>Please log in first</message>
       </redirect>
       </exception>
      
       <exception>
       <redirect view-id="/error.xhtml">
       <message>Unexpected error, please try again</message>
       </redirect>
       </exception>
      </pages>