首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

[JSF]求救,SelectItems有关问题,几天了都未解决!

2012-01-06 
[JSF]求救,SelectItems问题,几天了都未解决!!我在JSF中不论是用 h:selectManyListbox 还是 h:selectOnu

[JSF]求救,SelectItems问题,几天了都未解决!!
我在JSF中不论是用 <h:selectManyListbox> 还是 <h:selectOnuMenu> 都报这样的错误:
16:01:59,343   ERROR   [jsp]:704   -   Servlet.service()   for   servlet   jsp   threw   exception
java.lang.IllegalArgumentException:   "{2} "   Conversion   Error   setting   value   ' '{0} ' '   for   ' '{1} ' '.
    at   com.sun.faces.util.Util.getSelectItems(Util.java:610)
    at   com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:488)
    at   com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:465)
    at   com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:430)
    at   javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:712)
    at   com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:443)
    at   com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:233)
    at   javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:693)
    at   javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:600)
    at   javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:537)
    at   com.sun.faces.taglib.html_basic.PanelGridTag.doEndTag(PanelGridTag.java:460)
    at   org.apache.jsp.general.createGameTable_jsp._jspx_meth_h_panelGrid_0(createGameTable_jsp.java:319)
    at   org.apache.jsp.general.createGameTable_jsp._jspx_meth_h_form_0(createGameTable_jsp.java:222)
    at   org.apache.jsp.general.createGameTable_jsp._jspService(createGameTable_jsp.java:145)
    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: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:802)
    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   com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:322)
    at   com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:147)
    at   com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
    at   com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
    at   com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
    at   javax.faces.webapp.FacesServlet.service(FacesServlet.java:198)
    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.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(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.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)

我的JSP文件内容如下:

<h:outputLabel   for= "homeTeamInput ">
                        <h:outputText   value= "主场球队: "   />
                    </h:outputLabel>
                    <h:selectManyListbox   id= "homeTeamInput "   required= "true "   value= "#{gameBean.hometeamId} ">
                        <basketball:validateSelectedItemsRange   minNum= "1 "/>
                        <f:selectItems   value= "#{teamListBean.teamSelectItems} "   id= "selectHomeTeams "/>
                    </h:selectManyListbox>
                    <h:message   for= "homeTeamInput "   styleClass= "errors "   />

                    <h:outputLabel   for= "guestTeamInput ">
                        <h:outputText   value= "客场球队: "   />
                    </h:outputLabel>
                    <h:selectManyListbox   id= "guestTeamInput "   required= "true "   value= "#{gameBean.guestteamId} ">
                        <basketball:validateSelectedItemsRange   minNum= "1 "/>
                        <f:selectItems   value= "#{teamListBean.teamSelectItems} "   id= "selectGuestTeams "/>
                    </h:selectManyListbox>
                    <h:message   for= "guestTeamInput "   styleClass= "errors "   />



其中teamListBean是applicationScope,teamSelectItems是一个SelectItem[],   gameBean.guestteamId是String型。

backing   bean文件内容如下   :

1.TeamListBean.java

//SelectItem[]   for   the   gameTable   team   selectItems
    private   SelectItem[]   teamSelectItems;
public   SelectItem[]   getTeamSelectItems()   {
        if   (this.teamSelectItems   ==   null)   {
            try   {
                List   teams   =   this.serviceLocator.getCacheService()
                        .getAllTeams();
                HashMap   teamMap   =   new   HashMap();
                this.teamSelectItems   =   new   SelectItem[teams.size()];
                for   (int   i   =   0;   i   <   teams.size();   i++)   {
                    teamMap   =   (HashMap)   teams.getLight   Bulb;
                    String   tName_Key   =   (String)   teamMap.get( "teamname ");
                    String   tId_Value   =   (String)   teamMap.get( "teamId ");
                    teamSelectItems[i]   =   new   SelectItem(tId_Value,   tName_Key);
                }
            }   catch   (Exception   e)   {
                String   msg   =   "Could   not   getTeamSelectItems ";
                this.logger.error( "Could   not   getTeamSelectItems ",   e);
                throw   new   FacesException(msg,   e);
            }
        }
        return   this.teamSelectItems;
    }
   
    public   void   setTeamSelectItems(SelectItem[]   newTeamSelectItem){
        this.teamSelectItems   =   newTeamSelectItem;
    }

2.GameBean.java

    /**   persistent   field   */
    private   String   hometeamId;

    /**   persistent   field   */
    private   String   guestteamId;

public   String   getGuestteamId()   {
        return   this.guestteamId;
    }

    public   void   setGuestteamId(String   guestTeamId){
        this.logger.debug( "GameBean   setGuestteamId()!   ");
        this.guestteamId   =   guestTeamId;
    }

    public   String   getHometeamId()   {
        return   this.hometeamId;
    }

    public   void   setHometeamId(String   homeTeamId){


        this.logger.debug( "GameBean   setHometeamId()!   ");
        this.hometeamId   =   homeTeamId;
    }

在google上查了好久都没有,知道可能是type   not   match,但修改了都不行啊!求达人帮忙!!

[解决办法]
用 <h:selectManyListbox> 时,它的value必须是array或者是list,建议用string[],
<h:selectOneMenu> 的value必须是string,否则会有错误。
用 <h:selectOneMenu> 就可以了。
检查你的 <basketball:validateSelectedItemsRange minNum= "1 "/> ,可以先删掉试试,应该是没有问题的。祝你好运。

热点排行