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