>From: "Ian.Priest" <[EMAIL PROTECTED]> 
>
> Hey all, 
> 
> I'm looking for guidance on a "nice" way of doing something. 
> 
> I have a page with two component on it. One is a "Select country" 
> drop-down and one is a "phone-number" input text. The latter has a small 
> text prefix that shows the international dialling code for the selected 
> country. Both fields are required. 
> 
> The Country drop-down has onChange()="submit();" and a 
> ValueChangeListener method on the ViewController. When a new country is 
> chosen: 
> 
> The form is submitted. 
> The ValueChangeListener looks up the international dialling code for the 
> chosen country and sets a value on the bean 
> The ValueChangeListener calls renderResponse(). 
> The view is rendered with the dialling code displayed just before the 
> phone-number field. 
> 
> The problem lies here. If having selected a country I now submit the 
> form without entering a phone-number the form validation fails because 
> the phone-number feild is required. That means (JSF lifecycle) that the 
> bean values are not initialised from the request. That means that my 
> dialling-code bean property is now null again and so disappears when the 
> view is re-rendered with the error. 
> 
> To fix it, in prerender() I check for (diallingCode == null && 
> isPostBack()), assume it's an error condition and look up the value of 
> the dialling code from the requestParameterMap like this: 
> 
> public void prerender() { 
> 
> String isoCountryCode = 
> getAddresses()[0].getCountry().getIsoCountryCode(); 
> 
> // If the isocode is null and this is a postback it indicates 
> // some validation error. Get isocode from the request 
> if ( isoCountryCode == null && isPostBack() ) { 
> Map requestParameterMap = 
> getFacesContext().getExternalContext().getRequestParameterMap(); 
> Set set = requestParameterMap.keySet(); 
> for (Object key : set) { 
> if ( key.toString().endsWith("country") ) 
> isoCountryCode = (String) 
> requestParameterMap.get(key); 
> } 
> } 
> 
> initDiallingCode(isoCountryCode); 
> } 
> 
> That fixes my bug. But am I looking up the value in the best way? How 
> would others fix this problem? 
> 

You might take a look at Shale remoting.  David Geary just submitted a good 
overview.
http://shale.apache.org/features-remoting.html

David also has a slick Ajax/remoting example in the shale usecases that 
populates a city and state based on a zip code selected from a droplist.


> Cheers, 
> Ian. 
> 

Gary

> 
> 
> 
> 
> 

Reply via email to