Tonio,

Sorry, here is the form that contains the JSF code:

<h:form id="chooseControlDeviceForm" style="margin: 0px; padding: 0px; width:
auto; background-color: #CCCC77;" onsubmit="submitFormViaAJAX(event, this,
'step2FillResultArea');">
        STEP 1:  Add a new Control Device by choosing a type from the drop-down
list:<br />
        <h:selectOneMenu id="selectFromExistingTenants"
value="#{SelectNewControlDeviceTypePage.chosenDevice}">
                <f:selectItems
value="#{SelectNewControlDeviceTypePage.licensedDevices}"/>
        </h:selectOneMenu>&nbsp;&nbsp;
        
        <h:commandButton id="fillButton" immediate="true" type="submit"
action="#{SelectNewControlDeviceTypePage.chooseDevice}" value="Choose"/>
        <h:messages showDetail="table"  layout="table"/>
</h:form>

So the method is being called via the commandButton.

-Faisal 

-----Original Message-----
From: Tonio Caputo [mailto:[EMAIL PROTECTED] 
Sent: Monday, June 05, 2006 2:00 PM
To: MyFaces Discussion
Subject: RE: Problem with selectOneMenuItem

Faisal,

   When are you calling chooseDevice() method ?

   I mean, during the processing of which JSF event are you calling
chooseDevice().

Regards

   
On Mon, 2006-06-05 at 13:40 -0700, Faisal Mahmoud wrote:
> Hi Tonio,
> 
> My backing bean is in the session, and the way I populate the List is 
> via in the getter method for the property. The full class code is 
> below. Note I use the Spring framework, so alot of my dependencies are 
> wired using Spring. For the life of me, I cannot figure out why the 
> selection does not get bound to the property. Also, beneath the java 
> code is my faces-config.xml entry for this class.
> public class SelectNewControlDeviceTypePage {
>       /**
>        * Default no-args constructor
>        */
>       public SelectNewControlDeviceTypePage() {}
>       
>       // BUSINESS LOGIC
>       public String chooseDevice()
>       {
>               logger.info("Received a request from the JSF View to forward to
the 
> view associated with the chosen licensed controller.");
>               if (this.getChosenDevice() == null)
>               {
>                       logger.debug("#####################chosenDevice is
null");
>               }
>               
>               if (this.getChosenDevice().equals(this.ILON100))
>               {
>                       logger.info("Forwarding to view associated with Licensed
> Controller: " + this.ILON100);
>                       return this.CHOOSEILON100;
>               }
>               else if (this.getChosenDevice().equals(this.CARRIERDDE))
>               {
>                       logger.info("Forwarding to view associated with Licensed
> Controller: " + this.CARRIERDDE);
>                       return this.CHOOSECARRIERDDE;
>               }
>               else if (this.getChosenDevice().equals(this.HONEYWELL))
>               {
>                       logger.info("Forwarding to view associated with Licensed
> Controller: " + this.HONEYWELL);
>                       return this.CHOOSEHONEYWELL;
>               }
>               else
>               {
>                       logger.info("Forwarding to error view, unknown Licensed
Controller 
> chosen: " + this.getChosenDevice());
>                       return this.ERROR;
>               }
>       }
>       
>       // PROPERTY: controlDeviceEditDelegate
>       public ControlDeviceEditDelegate getControlDeviceEditDelegate() { 
> return this.controlDeviceEditDelegate; }
>       public void setControlDeviceEditDelegate(ControlDeviceEditDelegate
> controlDeviceDelegate) { this.controlDeviceEditDelegate =
controlDeviceDelegate;
> }             
>       
> 
>       // PROPERTY: chosenDevice
>       public String getChosenDevice() { return this.chosenDevice; }
>       public void setChosenDevice(String chosenDevice) { this.chosenDevice 
> = chosenDevice; }
> 
>       // PROPERTY: licensedDevices
>       public List getLicensedDevices() 
>       {
>               if (this.licensedDevices == null)
>               {
>                       logger.debug("List of licensedDevices is NULL,
retrieving via 
> delegate.");
>                       try
>                       {
>                               this.licensedDevices =
> this.controlDeviceEditDelegate.getLicensedControllerList();
>                       }
>                       catch (BaseViewException e)
>                       {
>                               logger.error(e);
>                               this.licensedDevices = new LinkedList();
>                       }
>                       catch (Exception e)
>                       {
>                               logger.error(e);
>                               this.licensedDevices = new LinkedList();
>                       }
>                       catch (Throwable e)
>                       {
>                               logger.error(e);
>                               this.licensedDevices = new LinkedList();
>                       }
>                       logger.debug("Received a List of licensedDevice
SelectItem objects 
> from delegate, list size = " + this.licensedDevices.size());
>               }
>               return this.licensedDevices; 
>       }
>       public void setLicensedDevices(List licensedDevices) { 
> this.licensedDevices = licensedDevices; }
>       
>       // Navigation strings
>       private final String ERROR = "error";
>       private final String CHOOSEILON100 = "chooseILON100";
>       private final String CHOOSEHONEYWELL = "chooseHoneywell";
>       private final String CHOOSECARRIERDDE = "chooseCarrierDDE";
>       
>       // Device description strings
>       private final String ILON100 = "Echelon iLON100";
>       private final String HONEYWELL = "Honeywell";
>       private final String CARRIERDDE = "Carrier DDE";
>       
>       // Associations
>       private ControlDeviceEditDelegate controlDeviceEditDelegate;
>       
>       // View Properties
>       private List licensedDevices;
>       private String chosenDevice = "";
>       
>       // Private constant member variables
>       private final Log logger = LogFactory.getLog(this.getClass());
> }
> 
>       <managed-bean>
>       
> <managed-bean-name>SelectNewControlDeviceTypePage</managed-bean-name>
>       
> <managed-bean-class>com.dv.ocs.jsf.bean.view.page.SelectNewControlDevi
> ceTypePage
> </managed-bean-class>
>               <managed-bean-scope>session</managed-bean-scope>
>               <managed-property>
>                       <property-name>controlDeviceEditDelegate</property-name>
>                       <value>#{controlDeviceEditDelegate}</value>
>               </managed-property>
>       </managed-bean>
> 
> -faisal
>  
> 
> -----Original Message-----
> From: Tonio Caputo [mailto:[EMAIL PROTECTED]
> Sent: Monday, June 05, 2006 12:18 PM
> To: MyFaces Discussion
> Subject: Re: Problem with selectOneMenuItem
> 
> Hi Faisal,
> 
>    I had the same problem, it was because my Backing Bean has request 
> scope, and my list was not initialized in the constructor method.
> 
>    The problem was, that as the Backing Bean did not have the list 
> initialized the "value" of the component was not set.
> 
>    An easy way to detect this problem is to be sure that your JSP page 
> has somewhere the tag h:messages.
> 
>       <h:messages showDetail="table"  layout="table"/>
> 
> Hope this helps
> tonio
>      
>    
> On Mon, 2006-06-05 at 11:48 -0700, Faisal Mahmoud wrote:
> > Hi All,
> >  
> > I am building a drop down list using the <h:selectOneMenu> tag and 
> > all the items in the List populate and show up correctly in the drop 
> > down list. But after the user selects an item in the list and 
> > submits the form, when I check the property that is specified in the 
> > tag's value attribute, I get a NullPointerException. My code is below:
> >  
> >  
> > jsp page:
> > <h:selectOneMenu id="selectFromExistingTenants" immediate="true"
> > value="#{SelectNewControlDeviceTypePage.chosenDevice}">
> >     <f:selectItems
> > value="#{SelectNewControlDeviceTypePage.licensedDevices}"/>
> > </h:selectOneMenu>
> >  
> > Code that builds the java.util.List of javax.faces.model.SelectItem 
> > objects in the <f:selectItems> value attribute:
> > List list = this.licensedControllerDAO.getAllLicensedControllers();
> > logger.debug("Retrieved List of LicensedController objects. List 
> > size = " + list.size()); Iterator iter = list.iterator(); while
> > (iter.hasNext()) {
> >     LicensedController licensedController = (LicensedController) 
> > iter.next();
> >     String controllerLabel = licensedController.getLabel();
> >     SelectItem selectItem = new SelectItem(controllerLabel, 
> > controllerLabel);
> >     licensedDevices.add(selectItem);
> >     logger.debug("Added a SelectItem to the List with 
> > controllerLabel = " + controllerLabel); }
> >  
> >  
> > Backing Bean code for the <h:selectOneMenu> tag's value attribute:
> > //SelectNewControlDeviceTypePage.java
> >  private String chosenDevice;
> > // PROPERTY: chosenDevice
> >  public String getChosenDevice() { return this.chosenDevice; }  
> > public void setChosenDevice(String chosenDevice) { this.chosenDevice 
> > = chosenDevice; }
> >  
> >  
> > So what am I doing wrong in my code such that my backing bean 
> > property is not getting with the chosen item?
> >  
> > Faisal Mahmoud
> > www.quidprocode.com
> >  
> 

Reply via email to