nubie issue: @In injection
dpruitt.dpruitt.bitwiseengineering.com Jul 19, 2010 11:59 PMHi,
I have an issue relating to injection. The suspects are Entity:Casino, EJB Bean:UserCasinoListActionBean and JSF: userCasinoListAction.xhtml. The purpose of the bean is to search for a list of Casino entities and return them in a Richfaces dataTable. The data table outjection works fine however I can't seem to get the injection for the search parameter to work. Note that I checked the @Name annotations and tried @In(create=true) without success. If I just dump the injection object to log.info() its a null object and if I use it in the query i get the @In attribute requires non-null value
 error. I would really appreciate your help as this is kind of making me crazy at this point.
>>>>>>>>>>>>>>>>>>>>> userCasinoListAction.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"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:a="http://richfaces.org/a4j"
    template="layout/template.xhtml">
<ui:define name="body">
   <!-- implement the search criteria panel -->
   <h:form id="casinoSearch" styleClass="edit">
      <rich:simpleTogglePanel label="Casino Search Filter" switchType="ajax">
         <!-- casino name field -->
         <s:decorate template="layout/display.xhtml">
            <ui:define name="label">Name</ui:define>
            <h:inputText id="Name" value="#{casino.name}"/>
         </s:decorate>
         <!-- casino city field -->
         <s:decorate template="layout/display.xhtml">
            <ui:define name="label">City</ui:define>
            <h:inputText id="City" value="#{casino.address.city}"/>
         </s:decorate>
    
      </rich:simpleTogglePanel>
   </h:form>
   <!-- search and reset button section -->
   <h:form id="userCasinoListActionForm">
         <h:commandButton id="search" value="search!"
                             action="#{userCasinoListAction.search}"/>
   </h:form>
   <!--  casino data table -->
   <rich:panel>
      
      <div class="results" id="casinoList">
                       
         <rich:dataTable value="#{casinos}" var="_casino">
            <!-- name column -->
            <h:column>
               <f:facet name="header">Name</f:facet>            
               #{_casino.name}
            </h:column>
            <!-- description column -->
            <h:column>
               <f:facet name="header">Description</f:facet>            
               #{_casino.description}
            </h:column>
            <!-- city column -->
      
            <h:column>
               <f:facet name="header">Address</f:facet>            
               <h:outputText value="#{_casino.address.address1}, #{_casino.address.city},
                              #{_casino.address.district.name},#{_casino.address.country.name}"/>
            </h:column>
          
         </rich:dataTable>
      </div>
   </rich:panel>
</ui:define>
</ui:composition>
>>>>>>>>>>>>>>>>>>>>>>>>> UserCasinoListActionBean.java <<<<<<<<<<<<<<<<<<<<<<
package org.bitwise.blackbox.session;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.*;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.international.StatusMessages;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.bitwise.blackbox.entity.Casino;
@Stateless
@Name("userCasinoListAction")
@Scope(ScopeType.SESSION)
public class UserCasinoListActionBean implements UserCasinoListActionIf
{
    @Logger private Log log;
    @In StatusMessages statusMessages;
    
    @In(value="#{entityManager}")
    EntityManager em;
    
    //@In
    //private Casino casino = new Casino();
    @In(create=true)
    private Casino casino;
    
    @DataModel
    public List<Casino> casinos;
    
    @DataModelSelection
    private Casino selCas;
    @Factory("casinos")
    public void search()
    {
        // implement your business logic here
        log.info("userCasinoListAction.search() action called");
        log.info("userCasinoListAction.search() casino: " + casino.getName());
        log.info("userCasinoListAction.search() casino.name:#{casino.name}");
        statusMessages.add("search");
        
        List<Casino> results = em
                        .createQuery("select c from Casino as c where c.name = 'The Sands'")
                          .setMaxResults(25)
                            .getResultList();
        casinos = results;
    }
    
    public void showDetails()
    {
         //casino.setSelected(true);
    }
    // add additional action methods
}
>>>>>>>>>>>>>>>>>>>>>>>> Casino.java <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
package org.bitwise.blackbox.entity;
// Generated Jul 10, 2010 10:25:32 AM by Hibernate Tools 3.3.0.GA
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.validator.Length;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import static org.jboss.seam.ScopeType.SESSION;
/**
 * Casino generated by hbm2java
 */
@Entity
@Name("casino")
@Scope(SESSION)
@Table(name = "CASINO", catalog = "blackbox")
public class Casino implements java.io.Serializable {
     /**
      * 
      */
     private static final long serialVersionUID = 8884370758712382089L;
     private Integer id;
     private Address address;
     private String proxyIp;
     private String name;
     private String description;
     private Integer vlevel;
     private String status;
     private Short dflag;
     private Set<Hand> hands = new HashSet<Hand>(0);
     public Casino() {
     }
     public Casino(Address address, String name) {
          this.address = address;
          this.name = name;
     }
.
.
.
.
     @Column(name = "name", nullable = false, length = 50)
     @NotNull
     @Length(max = 50)
     public String getName() {
          return this.name;
     }
     public void setName(String name) {
          this.name = name;
     }
}