You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Nacho Estrada <na...@gmail.com> on 2006/12/05 09:32:12 UTC

sandbox selectItems component

Hi devs,

The next code in org.apache.myfaces.custom.selectitems.UISelectItems
is throwing a NullPointerException when label is null:

private SelectItem createSelectItem() {
		Object value = getItemValue();
		String label = getItemLabel() != null ? getItemLabel().toString() : null;
		SelectItem item = new SelectItem(value, label);
		return item;
}

The SelectItem constructor invoked has the following code:

    public SelectItem(Object value, String label)
    {
        if (value == null) throw new NullPointerException("value");
        if (label == null) throw new NullPointerException("label");
        _value = value;
        _label = label;
        _description = null;
        _disabled = false;
    }


I've tried to change the createSelectItem method for this:
	private SelectItem createSelectItem() {
		Object value = getItemValue();
		SelectItem item;
		if ( getItemLabel() != null )
			item = new SelectItem(value, getItemLabel().toString());
		else
			item = new SelectItem(value);
		return item;
	}
and everything works fine.


There's other problem and it's why I'm getting a null label.
This is my selectItems element:
<s:selectItems value="#{EmployeeMB.enumValues}" var="mia"
				   itemValue="#{mia.value}"
	itemLabel="#{bundle[mia.value]}" />

I have declared a loadBundle element:
<f:loadBundle basename="es.dbs.ysf.sampleapp.employee.view.EmployeeViewResources"
var="bundle"/>
I have my items in a String Collection and I use this bundle for
getting the labels.
Everything is rendered ok, but when I submit the form the system is
creating a SelectItem component and when evaluate the getItemLabel
method y get a null value. If I don't use the bundle for the labels
works perfectly.

Comments are welcome. Thanks.

StackTrace:
java.lang.NullPointerException: label
	at javax.faces.model.SelectItem.<init>(SelectItem.java:52)
	at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItem(UISelectItems.java:136)
	at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItems(UISelectItems.java:112)
	at org.apache.myfaces.custom.selectitems.UISelectItems.getValue(UISelectItems.java:90)
	at javax.faces.component._SelectItemsIterator.hasNext(_SelectItemsIterator.java:92)
	at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:46)
	at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:62)
	at javax.faces.component.UIInput.validate(UIInput.java:353)
	at javax.faces.component.UIInput.processValidators(UIInput.java:183)
	at javax.faces.component.UIForm.processValidators(UIForm.java:70)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146)
	at org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:262)
	at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
	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(Unknown Source)

Re: sandbox selectItems component

Posted by Cagatay Civici <ca...@gmail.com>.
Hi,

It's fixed, thanks for reporting.

http://issues.apache.org/jira/browse/TOMAHAWK-817

Regards,

Cagatay

On 12/5/06, Gerald Müllan <bi...@gmail.com> wrote:
>
> The common way is to open a corresponding jira issue and apply the
> patch to it as an attachement.
>
> As a recent example see:
>
> http://issues.apache.org/jira/browse/TOMAHAWK-813
>
> cheers,
>
> Gerald
>
> On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> > Where I should provide the patch?
> >
> > On 12/5/06, Gerald Müllan <bi...@gmail.com> wrote:
> > > Hi,
> > >
> > > well, the NullPointerException should steem from the fact that the
> > > core loadBundle gets its
> > > values only in rendering phase and not in every phase of the
> lifecycle.
> > >
> > > You can use s:loadBundle which makes sure that the bundle is evaluated
> > > in each phase.
> > > This should avoid that the label equals null.
> > >
> > > If you make any enhancements to s:selectItems it would be cool if you
> > > could also provide a patch for it. I am sure, cagatay appreciates it
> > > and will commit the stuff.
> > >
> > > cheers,
> > >
> > > Gerald
> > >
> > > On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> > > > Hi devs,
> > > >
> > > > The next code in org.apache.myfaces.custom.selectitems.UISelectItems
> > > > is throwing a NullPointerException when label is null:
> > > >
> > > > private SelectItem createSelectItem() {
> > > >                 Object value = getItemValue();
> > > >                 String label = getItemLabel() != null ?
> getItemLabel().toString() : null;
> > > >                 SelectItem item = new SelectItem(value, label);
> > > >                 return item;
> > > > }
> > > >
> > > > The SelectItem constructor invoked has the following code:
> > > >
> > > >     public SelectItem(Object value, String label)
> > > >     {
> > > >         if (value == null) throw new NullPointerException("value");
> > > >         if (label == null) throw new NullPointerException("label");
> > > >         _value = value;
> > > >         _label = label;
> > > >         _description = null;
> > > >         _disabled = false;
> > > >     }
> > > >
> > > >
> > > > I've tried to change the createSelectItem method for this:
> > > >         private SelectItem createSelectItem() {
> > > >                 Object value = getItemValue();
> > > >                 SelectItem item;
> > > >                 if ( getItemLabel() != null )
> > > >                         item = new SelectItem(value,
> getItemLabel().toString());
> > > >                 else
> > > >                         item = new SelectItem(value);
> > > >                 return item;
> > > >         }
> > > > and everything works fine.
> > > >
> > > >
> > > > There's other problem and it's why I'm getting a null label.
> > > > This is my selectItems element:
> > > > <s:selectItems value="#{EmployeeMB.enumValues}" var="mia"
> > > >                                    itemValue="#{mia.value}"
> > > >         itemLabel="#{bundle[mia.value]}" />
> > > >
> > > > I have declared a loadBundle element:
> > > > <f:loadBundle basename="
> es.dbs.ysf.sampleapp.employee.view.EmployeeViewResources"
> > > > var="bundle"/>
> > > > I have my items in a String Collection and I use this bundle for
> > > > getting the labels.
> > > > Everything is rendered ok, but when I submit the form the system is
> > > > creating a SelectItem component and when evaluate the getItemLabel
> > > > method y get a null value. If I don't use the bundle for the labels
> > > > works perfectly.
> > > >
> > > > Comments are welcome. Thanks.
> > > >
> > > > StackTrace:
> > > > java.lang.NullPointerException: label
> > > >         at javax.faces.model.SelectItem.<init>(SelectItem.java:52)
> > > >         at
> org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItem(
> UISelectItems.java:136)
> > > >         at
> org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItems(
> UISelectItems.java:112)
> > > >         at
> org.apache.myfaces.custom.selectitems.UISelectItems.getValue(
> UISelectItems.java:90)
> > > >         at javax.faces.component._SelectItemsIterator.hasNext
> (_SelectItemsIterator.java:92)
> > > >         at javax.faces.component._SelectItemsUtil.matchValue
> (_SelectItemsUtil.java:46)
> > > >         at javax.faces.component.UISelectOne.validateValue(
> UISelectOne.java:62)
> > > >         at javax.faces.component.UIInput.validate(UIInput.java:353)
> > > >         at javax.faces.component.UIInput.processValidators(
> UIInput.java:183)
> > > >         at javax.faces.component.UIForm.processValidators(
> UIForm.java:70)
> > > >         at javax.faces.component.UIComponentBase.processValidators(
> UIComponentBase.java:624)
> > > >         at javax.faces.component.UIComponentBase.processValidators(
> UIComponentBase.java:624)
> > > >         at javax.faces.component.UIComponentBase.processValidators(
> UIComponentBase.java:624)
> > > >         at javax.faces.component.UIViewRoot.processValidators(
> UIViewRoot.java:146)
> > > >         at
> org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(
> LifecycleImpl.java:262)
> > > >         at org.apache.myfaces.lifecycle.LifecycleImpl.execute(
> LifecycleImpl.java:76)
> > > >         at javax.faces.webapp.FacesServlet.service(FacesServlet.java
> :137)
> > > >         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
> > > >         at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
> > > >         at
> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(
> ExtensionsFilter.java:190)
> > > >         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(Unknown Source)
> > > >
> > >
> > >
> > > --
> > > http://www.irian.at
> > >
> > > Your JSF powerhouse -
> > > JSF Consulting, Development and
> > > Courses in English and German
> > >
> > > Professional Support for Apache MyFaces
> > >
> >
>
>
> --
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>

Re: sandbox selectItems component

Posted by Gerald Müllan <bi...@gmail.com>.
The common way is to open a corresponding jira issue and apply the
patch to it as an attachement.

As a recent example see:

http://issues.apache.org/jira/browse/TOMAHAWK-813

cheers,

Gerald

On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> Where I should provide the patch?
>
> On 12/5/06, Gerald Müllan <bi...@gmail.com> wrote:
> > Hi,
> >
> > well, the NullPointerException should steem from the fact that the
> > core loadBundle gets its
> > values only in rendering phase and not in every phase of the lifecycle.
> >
> > You can use s:loadBundle which makes sure that the bundle is evaluated
> > in each phase.
> > This should avoid that the label equals null.
> >
> > If you make any enhancements to s:selectItems it would be cool if you
> > could also provide a patch for it. I am sure, cagatay appreciates it
> > and will commit the stuff.
> >
> > cheers,
> >
> > Gerald
> >
> > On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> > > Hi devs,
> > >
> > > The next code in org.apache.myfaces.custom.selectitems.UISelectItems
> > > is throwing a NullPointerException when label is null:
> > >
> > > private SelectItem createSelectItem() {
> > >                 Object value = getItemValue();
> > >                 String label = getItemLabel() != null ? getItemLabel().toString() : null;
> > >                 SelectItem item = new SelectItem(value, label);
> > >                 return item;
> > > }
> > >
> > > The SelectItem constructor invoked has the following code:
> > >
> > >     public SelectItem(Object value, String label)
> > >     {
> > >         if (value == null) throw new NullPointerException("value");
> > >         if (label == null) throw new NullPointerException("label");
> > >         _value = value;
> > >         _label = label;
> > >         _description = null;
> > >         _disabled = false;
> > >     }
> > >
> > >
> > > I've tried to change the createSelectItem method for this:
> > >         private SelectItem createSelectItem() {
> > >                 Object value = getItemValue();
> > >                 SelectItem item;
> > >                 if ( getItemLabel() != null )
> > >                         item = new SelectItem(value, getItemLabel().toString());
> > >                 else
> > >                         item = new SelectItem(value);
> > >                 return item;
> > >         }
> > > and everything works fine.
> > >
> > >
> > > There's other problem and it's why I'm getting a null label.
> > > This is my selectItems element:
> > > <s:selectItems value="#{EmployeeMB.enumValues}" var="mia"
> > >                                    itemValue="#{mia.value}"
> > >         itemLabel="#{bundle[mia.value]}" />
> > >
> > > I have declared a loadBundle element:
> > > <f:loadBundle basename="es.dbs.ysf.sampleapp.employee.view.EmployeeViewResources"
> > > var="bundle"/>
> > > I have my items in a String Collection and I use this bundle for
> > > getting the labels.
> > > Everything is rendered ok, but when I submit the form the system is
> > > creating a SelectItem component and when evaluate the getItemLabel
> > > method y get a null value. If I don't use the bundle for the labels
> > > works perfectly.
> > >
> > > Comments are welcome. Thanks.
> > >
> > > StackTrace:
> > > java.lang.NullPointerException: label
> > >         at javax.faces.model.SelectItem.<init>(SelectItem.java:52)
> > >         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItem(UISelectItems.java:136)
> > >         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItems(UISelectItems.java:112)
> > >         at org.apache.myfaces.custom.selectitems.UISelectItems.getValue(UISelectItems.java:90)
> > >         at javax.faces.component._SelectItemsIterator.hasNext(_SelectItemsIterator.java:92)
> > >         at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:46)
> > >         at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:62)
> > >         at javax.faces.component.UIInput.validate(UIInput.java:353)
> > >         at javax.faces.component.UIInput.processValidators(UIInput.java:183)
> > >         at javax.faces.component.UIForm.processValidators(UIForm.java:70)
> > >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> > >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> > >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> > >         at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146)
> > >         at org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:262)
> > >         at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> > >         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
> > >         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> > >         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> > >         at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
> > >         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(Unknown Source)
> > >
> >
> >
> > --
> > http://www.irian.at
> >
> > Your JSF powerhouse -
> > JSF Consulting, Development and
> > Courses in English and German
> >
> > Professional Support for Apache MyFaces
> >
>


-- 
http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces

Re: sandbox selectItems component

Posted by Nacho Estrada <na...@gmail.com>.
Where I should provide the patch?

On 12/5/06, Gerald Müllan <bi...@gmail.com> wrote:
> Hi,
>
> well, the NullPointerException should steem from the fact that the
> core loadBundle gets its
> values only in rendering phase and not in every phase of the lifecycle.
>
> You can use s:loadBundle which makes sure that the bundle is evaluated
> in each phase.
> This should avoid that the label equals null.
>
> If you make any enhancements to s:selectItems it would be cool if you
> could also provide a patch for it. I am sure, cagatay appreciates it
> and will commit the stuff.
>
> cheers,
>
> Gerald
>
> On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> > Hi devs,
> >
> > The next code in org.apache.myfaces.custom.selectitems.UISelectItems
> > is throwing a NullPointerException when label is null:
> >
> > private SelectItem createSelectItem() {
> >                 Object value = getItemValue();
> >                 String label = getItemLabel() != null ? getItemLabel().toString() : null;
> >                 SelectItem item = new SelectItem(value, label);
> >                 return item;
> > }
> >
> > The SelectItem constructor invoked has the following code:
> >
> >     public SelectItem(Object value, String label)
> >     {
> >         if (value == null) throw new NullPointerException("value");
> >         if (label == null) throw new NullPointerException("label");
> >         _value = value;
> >         _label = label;
> >         _description = null;
> >         _disabled = false;
> >     }
> >
> >
> > I've tried to change the createSelectItem method for this:
> >         private SelectItem createSelectItem() {
> >                 Object value = getItemValue();
> >                 SelectItem item;
> >                 if ( getItemLabel() != null )
> >                         item = new SelectItem(value, getItemLabel().toString());
> >                 else
> >                         item = new SelectItem(value);
> >                 return item;
> >         }
> > and everything works fine.
> >
> >
> > There's other problem and it's why I'm getting a null label.
> > This is my selectItems element:
> > <s:selectItems value="#{EmployeeMB.enumValues}" var="mia"
> >                                    itemValue="#{mia.value}"
> >         itemLabel="#{bundle[mia.value]}" />
> >
> > I have declared a loadBundle element:
> > <f:loadBundle basename="es.dbs.ysf.sampleapp.employee.view.EmployeeViewResources"
> > var="bundle"/>
> > I have my items in a String Collection and I use this bundle for
> > getting the labels.
> > Everything is rendered ok, but when I submit the form the system is
> > creating a SelectItem component and when evaluate the getItemLabel
> > method y get a null value. If I don't use the bundle for the labels
> > works perfectly.
> >
> > Comments are welcome. Thanks.
> >
> > StackTrace:
> > java.lang.NullPointerException: label
> >         at javax.faces.model.SelectItem.<init>(SelectItem.java:52)
> >         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItem(UISelectItems.java:136)
> >         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItems(UISelectItems.java:112)
> >         at org.apache.myfaces.custom.selectitems.UISelectItems.getValue(UISelectItems.java:90)
> >         at javax.faces.component._SelectItemsIterator.hasNext(_SelectItemsIterator.java:92)
> >         at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:46)
> >         at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:62)
> >         at javax.faces.component.UIInput.validate(UIInput.java:353)
> >         at javax.faces.component.UIInput.processValidators(UIInput.java:183)
> >         at javax.faces.component.UIForm.processValidators(UIForm.java:70)
> >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> >         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
> >         at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146)
> >         at org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:262)
> >         at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
> >         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
> >         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> >         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> >         at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
> >         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(Unknown Source)
> >
>
>
> --
> http://www.irian.at
>
> Your JSF powerhouse -
> JSF Consulting, Development and
> Courses in English and German
>
> Professional Support for Apache MyFaces
>

Re: sandbox selectItems component

Posted by Gerald Müllan <bi...@gmail.com>.
Hi,

well, the NullPointerException should steem from the fact that the
core loadBundle gets its
values only in rendering phase and not in every phase of the lifecycle.

You can use s:loadBundle which makes sure that the bundle is evaluated
in each phase.
This should avoid that the label equals null.

If you make any enhancements to s:selectItems it would be cool if you
could also provide a patch for it. I am sure, cagatay appreciates it
and will commit the stuff.

cheers,

Gerald

On 12/5/06, Nacho Estrada <na...@gmail.com> wrote:
> Hi devs,
>
> The next code in org.apache.myfaces.custom.selectitems.UISelectItems
> is throwing a NullPointerException when label is null:
>
> private SelectItem createSelectItem() {
>                 Object value = getItemValue();
>                 String label = getItemLabel() != null ? getItemLabel().toString() : null;
>                 SelectItem item = new SelectItem(value, label);
>                 return item;
> }
>
> The SelectItem constructor invoked has the following code:
>
>     public SelectItem(Object value, String label)
>     {
>         if (value == null) throw new NullPointerException("value");
>         if (label == null) throw new NullPointerException("label");
>         _value = value;
>         _label = label;
>         _description = null;
>         _disabled = false;
>     }
>
>
> I've tried to change the createSelectItem method for this:
>         private SelectItem createSelectItem() {
>                 Object value = getItemValue();
>                 SelectItem item;
>                 if ( getItemLabel() != null )
>                         item = new SelectItem(value, getItemLabel().toString());
>                 else
>                         item = new SelectItem(value);
>                 return item;
>         }
> and everything works fine.
>
>
> There's other problem and it's why I'm getting a null label.
> This is my selectItems element:
> <s:selectItems value="#{EmployeeMB.enumValues}" var="mia"
>                                    itemValue="#{mia.value}"
>         itemLabel="#{bundle[mia.value]}" />
>
> I have declared a loadBundle element:
> <f:loadBundle basename="es.dbs.ysf.sampleapp.employee.view.EmployeeViewResources"
> var="bundle"/>
> I have my items in a String Collection and I use this bundle for
> getting the labels.
> Everything is rendered ok, but when I submit the form the system is
> creating a SelectItem component and when evaluate the getItemLabel
> method y get a null value. If I don't use the bundle for the labels
> works perfectly.
>
> Comments are welcome. Thanks.
>
> StackTrace:
> java.lang.NullPointerException: label
>         at javax.faces.model.SelectItem.<init>(SelectItem.java:52)
>         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItem(UISelectItems.java:136)
>         at org.apache.myfaces.custom.selectitems.UISelectItems.createSelectItems(UISelectItems.java:112)
>         at org.apache.myfaces.custom.selectitems.UISelectItems.getValue(UISelectItems.java:90)
>         at javax.faces.component._SelectItemsIterator.hasNext(_SelectItemsIterator.java:92)
>         at javax.faces.component._SelectItemsUtil.matchValue(_SelectItemsUtil.java:46)
>         at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:62)
>         at javax.faces.component.UIInput.validate(UIInput.java:353)
>         at javax.faces.component.UIInput.processValidators(UIInput.java:183)
>         at javax.faces.component.UIForm.processValidators(UIForm.java:70)
>         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
>         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
>         at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:624)
>         at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:146)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.processValidations(LifecycleImpl.java:262)
>         at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:76)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>         at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
>         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(Unknown Source)
>


-- 
http://www.irian.at

Your JSF powerhouse -
JSF Consulting, Development and
Courses in English and German

Professional Support for Apache MyFaces