Hi,

when using values for a selectMany component like selectOneMenu, you
always need beneath the label a corresponding value. If using only the
ResourceBundle, you are not really typesafe when matching the values
etc. To my mind its little bit dirty, but that maybe
a personal opinion.

Another suggestion would be, using an Enum class like
"PersonTypeEnum". Then you can easily return the values via a
backing-bean method:

public List<PersonTypeEnum> getPersonTypes()
{
    return Arrays.asList(PersonTypeEnum.values());
}

In thomahawk there is the nice component t:selectItems; Using it
abstracts from returning instances of a SelectItem and putting a
jsf-dependency in code. Just return any list in the model method like
in the above example, and write:

<t:selectItems var="prsType" value="#{bean.personTypes}"
                                          itemLabel="#{prsType.name}"
                                          itemValue="#{prsType.name}"/>

Maybe using label and value as the same is not really nice, so you can
also map the label to a resourceBundle:

<t:selectItems var="prsType" value="#{bean.personTypes}"
                                          itemLabel="#{label[prsType.name]}"
                                          itemValue="#{prsType.name}"/>

In the bundle:

ADMIN = Administrator

Looks like a nicer solution to me (but i don`t know how the core-jsf
book handles this requirement).

cheers,

Gerald

On 2/6/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

I had the same requirement for my own application (which uses SelectItem
lists all over the place and I want to pull the strings from a resource
bundle).  You can find examples which describe how to do this (i.e. return
SelectItem collections, etc.) in the Core JavaServer Faces book.  I would
also recommend that you make your class Serializable (in case you want to
use it in a Backing Bean later which may have to support this).  I did not
use Jakarta Commons for the string lookups, but it doesn't require very much
code to get the locale from the UIViewRoot, fetch the Resource Bundle, then
lookup the corresponding strings from the proper resource bundle.  Good
luck.

-------------- Original message --------------
From: "Wabner, Thomas (EXT)" <[EMAIL PROTECTED]>

> Hi,
>
> the selectItems tag needs as an object the type SelectItem,
> SelectItem[],
> Collection or Map (the exception stack trace shows you up this). But the
> property text.items returns only a string with the value " first,
> second, third" and not as a list.
>
> You can decide to write your own backing bean which reads the property
> file (using Jakarta commons configuration would be my choice) and
> returns a Collection of strings.
>
> Regards,
>
> - Thomas Wabner
>
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
> Sent: Montag, 5. Februar 2007 19:00
> To: [email protected]
> Subject: Resource Bundle text for selectOneMenu
>
> Hello
>
> I would like to use the texts of a resource bundle in my
> selectOneMenu
> I tried ist with
>
> The Text.resources content:
>
> items=first, second, third
>
> In the JSF file:
>
>
>
>
>
>
>
> This gives the standard exception:
>
>
> not reference an Object of type SelectItem, SelectItem[],
> Collection or Map but of type : java.lang.String
> at
>
org.apache.myfaces.shared_impl.util.SelectItemsIterator.hasNext
> (SelectItemsIterator.java:144)
> at
org.apache.myfaces.shared_impl.renderkit.RendererUtils. <
BR>&gt ; internalGetSelectItemList(RendererUtils.java:448)
> at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.
> getSelectItemList(RendererUtils.java:426)
> at
>
org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.
> internalRenderSelect(HtmlRendererUtils.java:294)
> at
>
org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.
> renderMenu(HtmlRendererUtils.java:267)
> at org.apache.myfaces.shared_impl.renderkit.html.
> HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:59)
> at
>
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.
> java:539)
> at
>
javax.faces.webapp.UIComponentTag.encodeEnd(UIComponentTag.java:
> 498)
> at
>
javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:
> 366)
> at
org.apache.jsp.sellarticle_jsp._jspx_meth_h_selectOneMenu_1
> (sellarticle_jsp.java:825)
&g t; at org.apache.jsp.sellarticle_jsp._jspx_meth_f_view_0
> (sellarticle_jsp.java:211)
> at
>
org.apache.jsp.sellarticle_jsp._jspService(sellarticle_jsp.java:
> 96)
> at
>
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:
> 97)
> at
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
> at org.apache.jasper.servlet.JspServletWrapper.service
> (JspServletWrapper.java:334)
> 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:802)
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:252)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:173)
> at org.apa che.ca
talina.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:419)
> at
>
org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView
> (JspViewHandlerImpl.java:211)
> at org.ajax4jsf.framework.ViewHandlerWrapper.renderView
> (ViewHandlerWrapper.java:101)
> at org.ajax4jsf.framework.ajax.AjaxViewHandler.renderView
> (AjaxViewHandler.java:221)
> at
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute
> (RenderResponseExec utor.j ava:41)
> at
>
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.
> java:132)
> at
>
javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
> 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:100)
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:202)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:173)
> at
>
org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter
> (BaseXMLFilter.java:75)
> at
org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter
> (BaseF ilter. java:213)
> at
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
> (ApplicationFilterChain.java:202)
> at
org.apache.catalina.core.ApplicationFilterChain.doFilter
> (ApplicationFilterChain.java:173)
> at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter
> (ExtensionsFilter.java:147)
> 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.apache.catalina.core.StandardHostValve.invoke
> (StandardHostValve.java:126)
> at org.apache.catalina.valves.ErrorReportValve.invoke
> (Error Report Valve.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.LeaderFollowerWorkerThread.runIt
> (LeaderFollowerWorkerThread.java:80)
> at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run
> (ThreadPool.java:684)
> at java.lang.Thread.run(Thread.java:595)
>


--
http://www.irian.at

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

Professional Support for Apache MyFaces

Reply via email to