[jboss-user] [JBoss Seam] - Re: Adding/Persisting A Record Problem...

johnurban do-not-reply at jboss.com
Sat Oct 28 23:14:30 EDT 2006


I did as you suggested and made a very simple example. Now I get this exception:

"does not contain Objects of type SelectItem"

JSF:


  | <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
  | <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
  | 
  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  |  <f:view>
  |  <f:loadBundle basename="messages" var="msg"/>
  |   <head>
  |    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  |    <title>
  |      <h:outputText value="#{msg.Create} #{msg.Person}" rendered="#{personEditor.new}"/>
  |      <h:outputText value="#{msg.Update}/#{msg.Delete} #{msg.Person}" rendered="#{!personEditor.new}"/>
  |    </title>
  |    <style type="text/css" media="all">
  |     @import "style/default/screen.css";
  |    </style>
  |   </head>
  |   <body>
  |   
  |     <%@ include file="header.htm" %>
  |   
  |    <h:form>
  |    
  |      <div class="rvgFind">
  |      <fieldset class="rvgFieldSet">
  |        <legend><h:outputText value="#{msg.Person} #{msg.Attributes}"/></legend>
  |        
  |        <span class="rvgInputs">
  |          <span class="rvgMeassage"><h:messages globalOnly="true"/></span>
  | 
  | 		 <h:selectOneMenu value="#{person.room}" converter="org.jboss.seam.EntityConverter">
  |    			<f:selectItems value="#{rooms}" />
  | 		 </h:selectOneMenu>
  | 		 
  |        <span class="rvgActions">
  |          <h:commandButton type="submit" value="#{msg.Create}" action="#{roomService.create}" rendered="#{roomService.new}"/>
  |        </span>
  |      
  |      </fieldset>
  |      </div>
  |     
  |    </h:form>
  | 
  |   </body>
  |  </f:view>
  | </html>
  | 

RoomService.java


  | package testSeam;
  | 
  | // Generated Oct 6, 2006 12:55:26 AM by Hibernate Tools 3.2.0.beta7
  | 
  | import javax.ejb.Local;
  | 
  | @Local
  | public interface RoomService {
  | 	public boolean isNew();
  | 
  | 	public void setNew(boolean isNew);
  | 
  | 	public Room getRoom();
  | 
  | 	public void setRoom(Room room);
  | 
  | 	public void setDoneOutcome(String outcome);
  | 
  | 	public String update();
  | 
  | 	public String delete();
  | 
  | 	public String create();
  | 
  | 	public String done();
  | 	
  | 	public void buildRooms();
  | }
  | 
  | 

RoomServiceBean.java


  | package testSeam;
  | 
  | // Generated Oct 6, 2006 12:55:26 AM by Hibernate Tools 3.2.0.beta7
  | 
  | import java.util.Map;
  | import java.util.List;
  | import javax.ejb.Remove;
  | import javax.ejb.Stateless;
  | import javax.ejb.Stateful;
  | import javax.ejb.TransactionAttribute;
  | import static javax.ejb.TransactionAttributeType.NOT_SUPPORTED;
  | import javax.faces.application.FacesMessage;
  | import javax.faces.context.FacesContext;
  | import javax.interceptor.Interceptors;
  | 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.IfInvalid;
  | import org.jboss.seam.annotations.In;
  | import org.jboss.seam.annotations.Out;
  | import org.jboss.seam.annotations.Name;
  | import org.jboss.seam.annotations.Outcome;
  | import org.jboss.seam.annotations.Logger;
  | import org.jboss.seam.annotations.Factory;
  | 
  | import org.jboss.seam.ejb.SeamInterceptor;
  | import org.jboss.seam.log.Log;
  | import org.jboss.seam.selectitems.annotations.SelectItems;
  | 
  | import org.hibernate.validator.Valid; 
  | 
  | @Name("roomService")
  | @Stateless
  | @Interceptors(SeamInterceptor.class)
  | public class RoomServiceBean implements RoomService {
  | 
  |     @Logger
  |     private Log log;
  | 
  | 	@In(create = true)
  | 	private EntityManager entityManager;
  | 
  | 	@Valid
  | 	private Room room = new Room();
  | 
  | 	private String doneOutcome = "find";
  | 
  | 	@In(required = false)
  | 	private transient RoomFinder roomFinder;
  | 
  | 	@In(create = true)
  | 	private transient Map messages;
  | 
  | 	private boolean isNew = true;
  | 	
  | 	@SelectItems(label="description", addNoSelectionLabel="Please select a room")
  | 	private List<Room> rooms;
  | 
  | 	@TransactionAttribute(NOT_SUPPORTED)
  | 	public Room getRoom() {
  | 		return room;
  | 	} 
  | 
  | 	public void setRoom(Room room) {
  | 		this.room = room;
  | 	}
  | 
  | 	@TransactionAttribute(NOT_SUPPORTED)
  | 	public boolean isNew() {
  | 		return isNew;
  | 	}
  | 
  | 	public void setNew(boolean isNew) {
  | 		this.isNew = isNew;
  | 	}
  | 
  | 	public void setDoneOutcome(String outcome) {
  | 		doneOutcome = outcome;
  | 	}
  | 
  |     @SuppressWarnings("unchecked")
  |     @Factory("rooms")
  |     public void buildRooms() {
  |             rooms = entityManager.createQuery("select rm from Room rm").getResultList();
  |             log.info("Room list has " + rooms.size() + " entries");
  |     }
  | 
  | 	@Begin(join = true)
  | 	@IfInvalid(outcome = Outcome.REDISPLAY)
  | 	public String create() {
  | 		if (entityManager.find(Room.class, room.getId()) != null) {
  | 			FacesContext.getCurrentInstance().addMessage(
  | 					null,
  | 					new FacesMessage(messages.get("Room_id") + " "
  | 							+ messages.get("AlreadyExists")));
  | 			return null;
  | 		}
  | 		entityManager.persist(room);
  | 		isNew = false;
  | 		refreshFinder();
  | 		return "editRoom";
  | 	}
  | 
  | 	@IfInvalid(outcome = Outcome.REDISPLAY)
  | 	public String update() {
  | 		refreshFinder();
  | 		return null;
  | 	}
  | 
  | 	@End(ifOutcome = "find")
  | 	public String delete() {
  | 		entityManager.remove(room);
  | 		refreshFinder();
  | 		return doneOutcome;
  | 	}
  | 
  | 	@End(ifOutcome = "find")
  | 	public String done() {
  | 		if (!isNew)
  | 			entityManager.refresh(room);
  | 		return doneOutcome;
  | 	}
  | 
  | 	private void refreshFinder() {
  | 		if (roomFinder != null)
  | 			roomFinder.refresh();
  | 	}
  | }
  | 
  | 

Here is the full exception trace:


  | 22:06:30,155 INFO  [RoomServiceBean] Room list has 3 entries
  | 22:06:30,162 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
  | java.lang.IllegalArgumentException: Collection referenced by UISelectItems with binding '#{rooms}' and Component-Path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /uQuickPersonAdd.jsp][Class: javax.faces.component.html.HtmlForm,Id: _id2][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id5][Class: javax.faces.component.UISelectItems,Id: _id6]} does not contain Objects of type SelectItem
  |         at org.apache.myfaces.util.SelectItemsIterator.next(SelectItemsIterator.java:182)
  |         at org.apache.myfaces.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:487)
  |         at org.apache.myfaces.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:461)
  |         at org.apache.myfaces.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:272)
  |         at org.apache.myfaces.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:246)
  |         at org.apache.myfaces.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:54)
  |         at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:331)
  |         at javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:349)
  |         at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:253)
  |         at org.apache.jsp.uQuickPersonAdd_jsp._jspx_meth_h_selectOneMenu_0(uQuickPersonAdd_jsp.java:363)
  |         at org.apache.jsp.uQuickPersonAdd_jsp._jspx_meth_h_form_0(uQuickPersonAdd_jsp.java:284)
  |         at org.apache.jsp.uQuickPersonAdd_jsp._jspx_meth_f_view_0(uQuickPersonAdd_jsp.java:179)
  |         at org.apache.jsp.uQuickPersonAdd_jsp._jspService(uQuickPersonAdd_jsp.java:87)
  |         at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  |         at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
  |         at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
  |         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
  |         at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
  |         at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
  |         at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
  |         at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
  |         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
  |         at org.jboss.seam.jsf.SeamViewHandler.renderView(SeamViewHandler.java:59)
  |         at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352)
  |         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |         at java.lang.Thread.run(Thread.java:613)
  | 22:06:30,207 ERROR [SeamExceptionFilter] uncaught exception handled by Seam
  | javax.servlet.ServletException: Collection referenced by UISelectItems with binding '#{rooms}' and Component-Path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /uQuickPersonAdd.jsp][Class: javax.faces.component.html.HtmlForm,Id: _id2][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id5][Class: javax.faces.component.UISelectItems,Id: _id6]} does not contain Objects of type SelectItem
  |         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:121)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |         at java.lang.Thread.run(Thread.java:613)
  | 22:06:30,230 INFO  [SeamExceptionFilter] killing transaction
  | 22:06:30,257 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
  | javax.faces.FacesException: Collection referenced by UISelectItems with binding '#{rooms}' and Component-Path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /uQuickPersonAdd.jsp][Class: javax.faces.component.html.HtmlForm,Id: _id2][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id5][Class: javax.faces.component.UISelectItems,Id: _id6]} does not contain Objects of type SelectItem
  |         at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:421)
  |         at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:234)
  |         at org.jboss.seam.jsf.SeamViewHandler.renderView(SeamViewHandler.java:59)
  |         at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:352)
  |         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:107)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.seam.servlet.SeamExceptionFilter.doFilter(SeamExceptionFilter.java:45)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
  |         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
  |         at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
  |         at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
  |         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
  |         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  |         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  |         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  |         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  |         at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  |         at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
  |         at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
  |         at java.lang.Thread.run(Thread.java:613)
  | Caused by: org.apache.jasper.JasperException: Collection referenced by UISelectItems with binding '#{rooms}' and Component-Path : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /uQuickPersonAdd.jsp][Class: javax.faces.component.html.HtmlForm,Id: _id2][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: _id5][Class: javax.faces.component.UISelectItems,Id: _id6]} does not contain Objects of type SelectItem
  |         at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
  |         at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
  |         at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
  |         at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
  |         at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
  |         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
  |         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
  |         at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
  |         at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
  |         at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
  |         at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
  |         at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:415)
  |         ... 25 more
  | 


I'm beginning to wonder if I'll ever get this going. This should be a very simple screen. Does it get easier? I'm getting super discouraged learning Seam. I believe it offers much.. but I need encouragement.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3981574#3981574

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3981574



More information about the jboss-user mailing list