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; } }