selectOneMenu problem

Hello together!

I have selectOneMenu. It worked great, but know I added a value if nothing is selected ("Unknown") and it doesn't work anymore.

My selectOneMenu looks like:

<h:selectOneMenu id="selectOneBloodGroup" value="#{person.bloodGroup}">

<f:selectItems value="#{person.bloodGroupArray}"/>

</h:selectOneMenu>

My bean (getter and setter):

public void setBloodGroup(String bloodGroupItem)

{

FacesContext context = FacesContext.getCurrentInstance();

Application application = context.getApplication();

Message message = (Message)application.getVariableResolver().resolveVariable(context, "message");

if(bloodGroupItem==null||bloodGroupItem.equals("")||bloodGroupItem.equals(message.getDropDownBloodGroupNoValue()))

this.bloodGroup="-1";

else this.bloodGroup=bloodGroupItem;

}

public String getBloodGroup()

{

if(this.bloodGroup==null || this.bloodGroup.equals("")||this.bloodGroup.equals("-1"))

{

FacesContext context = FacesContext.getCurrentInstance();

Application application = context.getApplication();

Message message = (Message)application.getVariableResolver().resolveVariable(context, "message");

return message.getDropDownBloodGroupNoValue();

}

else return bloodGroup;

}

And the error I get is:

java.lang.IllegalArgumentException

at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:149)

at javax.faces.component.UISelectOne.matchValue(UISelectOne.java:141)

at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:114)

at javax.faces.component.UIInput.validate(UIInput.java:645)

at javax.faces.component.UIInput.executeValidate(UIInput.java:849)

at javax.faces.component.UIInput.processValidators(UIInput.java:412)

at javax.faces.component.UIForm.processValidators(UIForm.java:170)

at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)

at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:342)

at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:78)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)

at org.apache.myfaces.component.html.util.ExtensionsFilter.doFilter(ExtensionsFilter.java:122)

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(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:856)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)

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(Unknown Source)

[4045 byte] By [Markus1982a] at [2007-10-3 0:09:29]
# 1
Try change your managed-bean scope to "session" on your faces-config.xml definition.
Rulasa at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2

Hi did u solved your problem, if so I need your help,

i setted the scope as request, , when i load the page I am getting all values from ManageBean, when I sumbit the selected values, than its giving the error messages,

by jsp page code is looks like this

<h:selectOneMenu id="ownerListMenu" value="#{pc_trackingSearchPageBean.selectedOwner}">

<f:selectItems value="#{pc_trackingSearchPageBean.ownerList}" />

</h:selectOneMenu>

and in getter and setter I am not doing any special, just

public String getSelectedOwner() {

return selectedOwner;

}

public void setSelectedOwner(String selectedOwner) {

this.selectedOwner = selectedOwner;

}

javax.servlet.ServletException

javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)

root cause

java.lang.IllegalArgumentException

javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:146)

javax.faces.component.UISelectOne.matchValue(UISelectOne.java:141)

javax.faces.component.UISelectOne.validateValue(UISelectOne.java:114)

javax.faces.component.UIInput.validate(UIInput.java:645)

javax.faces.component.UIInput.executeValidate(UIInput.java:849)

javax.faces.component.UIInput.processValidators(UIInput.java:412)

javax.faces.component.UIForm.processValidators(UIForm.java:170)

javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:912)

javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:342)

com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:78)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)

srikanthga at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3
How die you create the List?Do you use SelectItems?
Markus1982a at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 4
yes, I used selectedItems to store key and values and later stored in ArrayList collection.Thankssrikanth
srikanthga at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 5
Do you use objects as keys and values? Show your setSelectedOwner() and getOwnerList().
BalusCa at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 6

no i converted into Strings and stored into ArrayList

SelectItem selectItem = new SelectItem(map.get"campus_code").toString(),map.get("campus_name").toString());

ownerList.add(selectItem);

than

public Collection getOwnerList() {

return ownerList;

}

public void setOwnerList(Collection ownerList) {

this.ownerList = ownerList;

}

here is my UI components getter

public HtmlSelectOneMenu getOwnerListMenu() {

if (ownerListMenu == null) {

ownerListMenu =

(HtmlSelectOneMenu) findComponentInRoot("ownerListMenu");

}

return ownerListMenu;

}

Thanks

srikanth

Message was edited by:

srikanthg

Message was edited by:

srikanthg

srikanthga at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 7

I am having the same problem.....do you mind sharing the solution or workaround?

apparently it only happen when i added more than one select one menu to the same page.

changing the backing bean gave some cyclic reference error upon page load ; calling this page from another session bean page

any help is greatly appreciated

mel

pinkmela at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 8
I don't know if it could help but I had the same problem, I changed my Collection of SelectItem from java.util.Set to java.util.List, and since it's working fine.Dan.
danielvda at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 9

During JSF's validation phase, selectOneMenu checks that the selected value is among its list of available select items. If the selected value is not among the available options, validation fails.

e.g. selectOneMenu has items "A", "B", and "C". If the submitted value is "D", validation will fail.

dfasdfsdafsadfasdfa at 2007-7-14 16:58:39 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...