keepvalues is for retaining values when there are no errors (but you want 
to retain the values from the previous submission). If there are errors, 
the values will be retained regardless of keepvalues. In your case, you are 
not using form.custom.widget, so you're not getting the values retained. If 
you create custom widgets, though, the field and value will get passed to 
the widget, so your custom widget should be able to retain the value if 
desired (without using request.vars).

Anthony

On Tuesday, January 14, 2014 11:52:54 AM UTC-5, Kiran Subbaraman wrote:
>
>  Anthony,
> Thanks for the link; that is useful. Also, was looking at the 
> implementation of the default widgets in 
> https://github.com/web2py/web2py/blob/master/gluon/sqlhtml.py.
>
> I think I can conclude that keepvalues does not retain values, as detailed 
> in this email. 
> Considering that I have to check for request.vars and then the 
> form.custom.* to assign values to be displayed, it makes sense to 
> encapsulate this amount of code in a helper function, or even a widget. I 
> intend to do just that.
>
> Thanks,
> Kiran
>
> ________________________________________
> Kiran Subbaramanhttp://subbaraman.wordpress.com/about/
>
> On 1/14/2014 8:46 PM, Anthony wrote:
>  
> Some instruction about creating custom widgets at the end of this section: 
> http://web2py.com/books/default/chapter/29/07/forms-and-validators#Widgets
> .
>
> On Tuesday, January 14, 2014 12:33:22 AM UTC-5, Kiran Subbaraman wrote: 
>>
>>  Yes, that works: use request.vars.*. That was the option which I had 
>> mentioned I may need to resort to, since *keepvalues *doesn't seem to 
>> work for me.
>> This basically comes down to me creating a bunch of widgets; mirroring 
>> the ones in web2py, where a widget would have logic, similar to the one 
>> below, in it. 
>> I need to figure out how to create a widget now. Am familiar with 
>> creating jsp tag libraries, and dojo widgets. 
>>
>>   <input type="text" class="form-control 
>>                    {{if form.errors.country:}}invalidinput{{pass}}"
>>                     id="country" name="country" 
>>                     value="{{=request.vars.country or 
>> form.custom.inpval['country']}}"
>>                     placeholder="{{=form.custom.comment['country']}}"
>>  
>> Thanks for your inputs,
>> Kiran
>>
>> ________________________________________
>> Kiran Subbaramanhttp://subbaraman.wordpress.com/about/
>>
>> On 1/14/2014 1:23 AM, Massimo Di Pierro wrote:
>>  
>> Strange. How about 
>>
>>  {{=request.vars.country or form.custom.inpval['country']}}
>>
>> On Monday, 13 January 2014 11:13:33 UTC-6, subbaram...@gmail.com wrote: 
>>>
>>> Massimo,
>>> Yes, I did. Does not make a difference. 
>>>
>>> Thanks for the suggestion,
>>> Kiran
>>>
>>> On Monday, January 13, 2014 7:49:15 PM UTC+5:30, Massimo Di Pierro 
>>> wrote: 
>>>>
>>>> Have you tried replacing 
>>>>
>>>>  value="{{=form.custom.inpval['country']}}"
>>>>
>>>>  with
>>>>
>>>>  value="{{=form.custom.dspval['country']}}"
>>>>
>>>> On Sunday, 12 January 2014 22:50:43 UTC-6, subbaram...@gmail.comwrote: 
>>>>>
>>>>> Really would like some help with this. Anyone have suggestions?
>>>>> Thank you,
>>>>> Kiran
>>>>>
>>>>> On Saturday, January 11, 2014 12:10:07 AM UTC+5:30, 
>>>>> subbaram...@gmail.com wrote: 
>>>>>>
>>>>>> Hello All,
>>>>>> The *design *is: I have a custom form with the a controller that 
>>>>>> inserts/updates a table. Tthe form accepts data, and on successful 
>>>>>> submission of this form, it stays on the same page (there are no 
>>>>>> redirects 
>>>>>> to another page or form)
>>>>>> *Issue*: The problem am seeing is, when I update values in the form, 
>>>>>> and submit it, the entered values are lost when the form returns because 
>>>>>> of 
>>>>>> successful submit, or due to errors. I have tried to use keepvalues=True 
>>>>>> in 
>>>>>> the form.accepts() and form.process() methods. No luck.
>>>>>> Details below.
>>>>>>
>>>>>> Since the page am building has specific design needs, I went with the 
>>>>>> option of a custom form, where I used the form.custom.* options quite a 
>>>>>> bit. Therefore input fields in the form look like this
>>>>>>   <input type="text" class="form-control 
>>>>>>                    {{if form.errors.country:}}invalidinput{{pass}}"
>>>>>>                     id="country" name="country" 
>>>>>>                     value="{{=form.custom.inpval['country']}}"
>>>>>>                     placeholder="{{=form.custom.comment['country']}}"
>>>>>>  
>>>>>> Also the controller is coded as below
>>>>>>      x = db(db.x.x_id == auth.user.id).select().first()
>>>>>>     if x:
>>>>>>         form = SQLFORM(db.x, record=x)
>>>>>>     else:
>>>>>>         form = SQLFORM(db.x)
>>>>>>     pass
>>>>>>
>>>>>>  
>>>>>>     # process the form
>>>>>>     if form.accepts(request.vars, formname='basicinfo_form',keepvalues
>>>>>> =True):
>>>>>>         response.flash = 'Basic Information updated successfully.'
>>>>>>     elif form.errors:
>>>>>>         response.flash = 'The submitted form contains errors. The 
>>>>>> fields in error are highlighted below.'
>>>>>>     else:
>>>>>>         response.flash = 'Please fill the form.'
>>>>>>     pass
>>>>>>
>>>>>>     return dict(form=form)
>>>>>>  
>>>>>> I was thinking that maybe I should capture the request.vars and send 
>>>>>> it back to the view alongwith the form. 
>>>>>> If the request.vars.country value exists, then I use that, instead of 
>>>>>> the form.custom.inpval['country']. This only makes the view code a bit 
>>>>>> more 
>>>>>> verbose, but if it solves the problem, then nothing like it. 
>>>>>>
>>>>>> Can anyone suggest what I could do to sort this out?
>>>>>> Thank you,
>>>>>> Kiran
>>>>>>
>>>>>> P.S: I did take a look at all the conversations in the forum about 
>>>>>> keepvalues. None of them seemed to help me. Though I did find this one 
>>>>>> to 
>>>>>> be interesting and am curious if this is sorted out already: 
>>>>>> https://groups.google.com/forum/#!searchin/web2py/keepvalues$20on$20validate/web2py/MNEYo96Shzg/jjKZaMmfAgQJ
>>>>>>
>>>>>>       -- 
>> Resources:
>> - http://web2py.com
>> - http://web2py.com/book (Documentation)
>> - http://github.com/web2py/web2py (Source code)
>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "web2py-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to web2py+un...@googlegroups.com.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>>
>>   -- 
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> --- 
> You received this message because you are subscribed to the Google Groups 
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to web2py+un...@googlegroups.com <javascript:>.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>
>  

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to