The Same SelectItem Control on Multiple Pages...
johnurban Nov 4, 2006 11:23 PMI need to put the same dropdown(selectitem) on multiple pages. I am using selectitems-1.1.0rc1. I have successfully place the dropdown on one screen. I am able to populate it and pull the selected value from it. Now, I need that same dropdown on another screen. In in my working screen, I use RoomServiceBean to call the DB and get a List:
<h:selectOneMenu value="#{person.room}" converter="org.jboss.seam.EntityConverter" required="true">
<f:selectItems value="#{rooms}" />
<h:message for="room"/>
</h:selectOneMenu>
where room is an attribute of the entity bean person.
Now my new screen looks like this:
<h:selectOneMenu value="#{attendanceService.room}" converter="org.jboss.seam.EntityConverter" required="true">
<f:selectItems value="#{rooms}" />
</h:selectOneMenu>
So "rooms" gets looked up in Seam and populated by the RoomServiceBean, b/c thats where rooms lives. But "attendanceService.room" seems to be conflicting with another room somehow.
Here is RoomServiceBean.java:
package testSeam;
// Generated Oct 6, 2006 12:55:26 AM by Hibernate Tools 3.2.0.beta7
import java.util.ArrayList;
import java.util.Iterator;
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.faces.model.SelectItem;
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)
@CheckLoggedIn
public class RoomServiceBean implements RoomService {
@Logger
private Log log;
@In(create = true)
private EntityManager entityManager;
@In(required=false)
private Login login;
private Room room = new Room();
@In(value="person", create=true)
@Out
private Person person = new Person();
private String doneOutcome = "find";
@In(required = false)
private transient RoomFinder roomFinder;
@In(create = true)
private transient Map messages;
private boolean isNew = true;
@SelectItems(label="name", addNoSelectionLabel="Please select a room")
private List<Room> rooms;
@SelectItems(label="name", addNoSelectionLabel="Please select an organization")
private List<Organization> organizations;
@TransactionAttribute(NOT_SUPPORTED)
public Person getPerson() {
System.out.println("PersonEditorBean.getPerson|"+person);
return person;
}
public void setPerson(Person person) {
System.out.println("PersonEditorBean.setPerson|"+person);
this.person = person;
}
@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")
@LoggedIn
public void buildRooms() {
log.info("top of buildRooms()");
Users loggedInUser = login.getInstance();
StringBuffer queryString = new StringBuffer();
queryString.append("select rm from Room rm ");
queryString.append(" where rm.organizationId = "+loggedInUser.getOrganizationId());
rooms = entityManager.createQuery(queryString.toString()).getResultList();
log.info("Room list has " + rooms.size() + " entries");
}
@SuppressWarnings("unchecked")
@Factory("organizations")
public void buildOrganizations() {
log.info("top of buildOrganizations()");
organizations = entityManager.createQuery("select org from Organization org").getResultList();
log.info("Organization list has " + organizations.size() + " entries");
}
@Begin(join = true)
@IfInvalid(outcome = Outcome.REDISPLAY)
@LoggedIn
public String addNewPerson() {
log.info("... about to call entityManager.find:"+person+"|"+person.getId());
Users loggedInUser = login.getInstance();
Organization org = new Organization();
org.setId(loggedInUser.getOrganizationId());
person.setOrganization(org);
if (entityManager.find(Person.class, person.getId()) != null) {
log.info("top of RoomServieBean.addNewPerson()");
FacesContext.getCurrentInstance().addMessage( null, new FacesMessage(messages.get("Person_id") + " " + messages.get("AlreadyExists")));
return null;
}
entityManager.merge(person);
isNew = false;
refreshFinder();
FacesContext.getCurrentInstance().addMessage( null, new FacesMessage("Person added successfully..."));
return "uPersonCheckin.jsp";
}
@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 AttendanceServicesBean.java:
package testSeam;
// Generated Sep 23, 2006 1:30:01 PM by Hibernate Tools 3.2.0.beta7
import static javax.ejb.TransactionAttributeType.NOT_SUPPORTED;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import java.util.Date;
import javax.ejb.Remove;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.commons.lang.RandomStringUtils;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Destroy;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.End;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.RequestParameter;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.log.Log;
import org.jboss.seam.ejb.SeamInterceptor;
@Name("attendanceService")
@Stateless
@Scope(ScopeType.STATELESS)
@Interceptors(SeamInterceptor.class)
@CheckLoggedIn
public class AttendanceServiceBean implements AttendanceService {
@Logger
private Log log;
@In(required=false)
private Login login;
private int pageNumber = 0;
private int pageSize = 20;
private boolean registered = false;
@DataModel
private List<Attendance> attendanceList;
@In(create = true)
private EntityManager entityManager;
@In(create = true)
private Room room;
private String order;
private boolean descending = false;
@RequestParameter
private String orderBy;
private int id;
public void setPageSize(int size) {
pageSize = size;
}
public int getPageSize() {
return pageSize;
}
public boolean isPreviousPage() {
return attendanceList != null && pageNumber > 0;
}
public boolean isNextPage() {
return attendanceList != null && attendanceList.size() == pageSize;
}
public void attendanceLookup() {
log.info("inside attendanceLookup");
Map<String, Object> parameters = new HashMap<String, Object>();
StringBuffer queryString = new StringBuffer();
queryString.append(" and roomId = :roomId");
parameters.put("roomId", room.getId());
if (queryString.length() == 0) {
queryString.append("select atnd from Attendance atnd");
} else {
queryString.delete(0, 4).insert(0,
"select atnd from Attendance atnd where");
}
log.info("sql:"+queryString.toString());
Query query = entityManager.createQuery(queryString.toString());
for (Entry<String, Object> param : parameters.entrySet()) {
query.setParameter(param.getKey(), param.getValue());
}
attendanceList = (List<Attendance>) query.setMaxResults(pageSize)
.setFirstResult(pageSize * pageNumber).getResultList();
}
public String findFirstPage() {
pageNumber = 0;
attendanceLookup();
return null;
}
public String findNextPage() {
pageNumber++;
attendanceLookup();
return null;
}
public String findPreviousPage() {
pageNumber--;
attendanceLookup();
return null;
}
public void refresh() {
if (attendanceList != null)
attendanceLookup();
}
public String clear() {
attendanceList = null;
// example = new Person();
return null;
}
public String reorder() {
if (orderBy.equals(order)) {
descending = !descending;
} else {
descending = false;
}
order = orderBy;
attendanceLookup();
return null;
}
@LoggedIn
public String edit() {
return "/uEditPerson.jsp";
}
}
I get this exception when trying to render my new page:
javax.faces.el.PropertyNotFoundException: Bean: $Proxy1061, property: room
at org.apache.myfaces.el.PropertyResolverImpl.getPropertyDescriptor(PropertyResolverImpl.java:445)
at org.apache.myfaces.el.PropertyResolverImpl.getPropertyDescriptor(PropertyResolverImpl.java:416)
at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:379)
at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:71)
at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:532)
at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:378)
at javax.faces.component.UIOutput.getValue(UIOutput.java:75)
at org.apache.myfaces.renderkit.html.HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(HtmlRendererUtils.java:314)
at org.apache.myfaces.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:290)
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.uQuickRoomReport_jsp._jspx_meth_h_selectOneMenu_0(uQuickRoomReport_jsp.java:297)
at org.apache.jsp.uQuickRoomReport_jsp._jspx_meth_h_form_0(uQuickRoomReport_jsp.java:242)
at org.apache.jsp.uQuickRoomReport_jsp._jspx_meth_f_view_0(uQuickRoomReport_jsp.java:189)
at org.apache.jsp.uQuickRoomReport_jsp._jspService(uQuickRoomReport_jsp.java:97)
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.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)
21:54:13,617 ERROR [SeamExceptionFilter] uncaught exception handled by Seam
javax.servlet.ServletException: Bean: $Proxy1061, property: room
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)
21:54:13,618 INFO [SeamExceptionFilter] killing transaction
21:54:13,622 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: Bean: $Proxy1061, property: room
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.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: Bean: $Proxy1061, property: room
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)
... 26 more