You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Damien Gu�rin <da...@atosorigin.com> on 2007/07/31 17:18:45 UTC

Tomahawk and SaveState

Hi everyone,

i've a problem with the UISaveState component... I've a JSF page which contains a form with many inputs.

<h:form id="myForm">
	<t:saveState id="save" value="#{mainBean}" />
	<h:selectOneMenu id="sessionLabel"
		value="#{mainBean.param1}"
		immediate="true" onchange="submit()"
		valueChangeListener="#{mainBean.param1SelectionChangedHandler}">
		<f:selectItems value="#{mainBean.param1List}" />
	</h:selectOneMenu>
	<h:inputText id="param1" value="#{mainBean.param2}" />
        <h:commandButton action="#{mainBean.doValidate}"
		value="OK" />
</h:form>

mainBean is a bean which contains :
- param1 attribute ;
- param2 attribute ;
- secondBean : bean to fill param2 in function of param1 selection.

So, my problem :
when the param1 value changes, the param2 don't change even if the param2 value seems to be calculated and assigned correctly in the mainBean (the display don't work, saveState, restoreState problem??).
If the secondBean is declared transient, when the param1 value changes, the param2 value changes too and it's ok but in this case, there is a problem in the form submission. The value of param2 is always the calculated value in param1SelectionChangedHandler even if user change the value directly in the form (the setter of param2 doen't seem to be used)...

Thanks a lot.


Re: Tomahawk and SaveState

Posted by song <so...@hotmail.com>.
I also encounter a problem like this :i request the page,shou correct,when i
submit the page,rase an error.

jsf page:

<h:selectManyListbox id="teams" value="#{UserForm.userTeamIds}" >
<f:selectItems value="#{UserForm.userTeamMap}"/>
</h:selectManyListbox>


backing bean :

public class UserForm {
	private UserService userService;

	private User user;
	

.......

	public List<String> getUserTeamIds(){
		log.debug("getUserTeamIds go here..");
		List<String> li=new java.util.ArrayList<String>();
		if(user!=null){
			Set<Team> teams=user.getTeams();
			for (Iterator<Team> itr=teams.iterator();itr.hasNext();){
				Team r=itr.next();
				li.add(r.getTeamId().toString());
			}
		}
		return li;
	}


	/**
	 * for select many
	 * @return
	 */
	public Map<String,String> getUserTeamMap(){
		log.debug("getUserTeamMap here :");
		java.util.Map<String,String> m=new java.util.LinkedHashMap<String,
String>();
		if(user!=null){
			Set<Team> teams=user.getTeams();
			for (Iterator<Team> itr=teams.iterator();itr.hasNext();){
				Team t=itr.next();
				m.put(t.getTeamName(),t.getTeamId().toString());
			}
		}
		return m;
	}

............
}


run in en error :
-------------------------------------------------
javax.servlet.ServletException
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)

org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

root cause 

java.util.NoSuchElementException

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

javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:164)
	javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:49)
	javax.faces.component.UISelectMany.matchValue(UISelectMany.java:485)
	javax.faces.component.UISelectMany.validateValue(UISelectMany.java:454)
	javax.faces.component.UIInput.validate(UIInput.java:867)
	javax.faces.component.UIInput.executeValidate(UIInput.java:1065)
	javax.faces.component.UIInput.processValidators(UIInput.java:666)

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

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

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

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

javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1030)
	javax.faces.component.UIForm.processValidators(UIForm.java:229)

javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1030)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662)

com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100)
	com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)

org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

-------------------------------------------------

i debug in it  ,when i post the page,the page invoke the
UserForm.getUserTeamMap() method,but return
a empety map,then the server validate the selectmany's available value and
selectedItems,then mismath.and throw a exception......is this reson????  who
can tell me .







Damien GUERIN wrote:
> 
> Hi everyone,
> 
> i've a problem with the UISaveState component... I've a JSF page which
> contains a form with many inputs.
> 
> <h:form id="myForm">
> 	<t:saveState id="save" value="#{mainBean}" />
> 	<h:selectOneMenu id="sessionLabel"
> 		value="#{mainBean.param1}"
> 		immediate="true" onchange="submit()"
> 		valueChangeListener="#{mainBean.param1SelectionChangedHandler}">
> 		<f:selectItems value="#{mainBean.param1List}" />
> 	</h:selectOneMenu>
> 	<h:inputText id="param1" value="#{mainBean.param2}" />
>         <h:commandButton action="#{mainBean.doValidate}"
> 		value="OK" />
> </h:form>
> 
> mainBean is a bean which contains :
> - param1 attribute ;
> - param2 attribute ;
> - secondBean : bean to fill param2 in function of param1 selection.
> 
> So, my problem :
> when the param1 value changes, the param2 don't change even if the param2
> value seems to be calculated and assigned correctly in the mainBean (the
> display don't work, saveState, restoreState problem??).
> If the secondBean is declared transient, when the param1 value changes,
> the param2 value changes too and it's ok but in this case, there is a
> problem in the form submission. The value of param2 is always the
> calculated value in param1SelectionChangedHandler even if user change the
> value directly in the form (the setter of param2 doen't seem to be
> used)...
> 
> Thanks a lot.
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Tomahawk-and-SaveState-tf4193716.html#a11946698
Sent from the MyFaces - Users mailing list archive at Nabble.com.