[jboss-user] [JBoss Seam] - The Same SelectItem Control on Multiple Pages...
johnurban
do-not-reply at jboss.com
Sat Nov 4 23:23:17 EST 2006
I 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
|
|
|
|
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3983269#3983269
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3983269
More information about the jboss-user
mailing list