Hmm, I was planning to use keepvalues for the following scenarios:

 * Scenario1 - submitted form returns with errors, and still displays
   the form with the submitted values
 * Scenario2 - submit form successfully, and still display the form
   with the submitted values

You mention that the keepvalues should work fine for Scenario2. I did not see that happen, hence the initial report. It doesn't retain the values in Scenario1, with or without keepvalues. I suspect this is because I was always, for example, setting form.custom.inpval['country'] to the country field; and this always gets the data from the database(?). My controller code is below. Can you please elaborate how I can do this "so your custom widget should be able to retain the value if desired (without using request.vars)".

Currently, am using the <code>request.vars.country or form.custom.inpval['country']</code> option to display the values in the field.

________________________________________
Kiran Subbaraman
http://subbaraman.wordpress.com/about/

On Tue, 14-01-2014 11:04 PM, Anthony wrote:
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
    <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 Subbaraman
    http://subbaraman.wordpress.com/about/  
<http://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
    
<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 Subbaraman
        http://subbaraman.wordpress.com/about/  
<http://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.com wrote:

                    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()
                        ifx:
                                form =SQLFORM(db.x,record=x)
                        else:
                        form =SQLFORM(db.x)
                        pass


                        # process the form
                        
ifform.accepts(request.vars,formname='basicinfo_form',keepvalues=True):
                                response.flash ='Basic Information
                        updated successfully.'
                        elifform.errors:
                                response.flash ='The submitted form
                        contains errors. The fields in error are
                        highlighted below.'
                        else:
                                response.flash ='Please fill the form.'
                        pass

                        returndict(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
                        
<https://groups.google.com/forum/#%21searchin/web2py/keepvalues$20on$20validate/web2py/MNEYo96Shzg/jjKZaMmfAgQJ>

-- Resources:
        - http://web2py.com
        - http://web2py.com/book (Documentation)
        - http://github.com/web2py/web2py
        <http://github.com/web2py/web2py> (Source code)
        - https://code.google.com/p/web2py/issues/list
        <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
        <https://groups.google.com/groups/opt_out>.

-- Resources:
    - http://web2py.com
    - http://web2py.com/book (Documentation)
    - http://github.com/web2py/web2py
    <http://github.com/web2py/web2py> (Source code)
    - https://code.google.com/p/web2py/issues/list
    <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
    <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.

--
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