You need to make a new formlet that knows about the default values.<div><br></div><div>We could imagine a macro that makes this nicer, but in general it will need to be something that creates a new one.</div><div><br></div>
<div>Is there some reason you don&#39;t want to do that?</div><div><br></div><div>I can imagine something like (formlet-display) that took the old values, but then it would be more monad-like than arrow-like, and wouldn&#39;t really be a formlet. If you can clarify your use case, it may be worth investigating.</div>
<div><br></div><div>Jay<br><br><div class="gmail_quote">On Fri, Nov 18, 2011 at 1:13 PM, Jordan Schatz <span dir="ltr">&lt;<a href="mailto:jordan@noionlabs.com">jordan@noionlabs.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
I have a pattern of user interaction that is common in my web app:<br>
<br>
I have a db record, I present it to the user in a form, the user edits<br>
the form, submits it, server side logic validates it, and then returns<br>
the same form with the updated record.<br>
<br>
I want to port the app to Racket, and I thought formlets would be just<br>
the thing, but I don&#39;t see how to fill the values into the formlet<br>
without making a new formlet... seems I need a (formlet-fill<br>
(some-values)) to go along with the formlet-display and formlet-process.<br>
<br>
Here is what I have: (Which doesn&#39;t work)<br>
<br>
----------------------------------------------------------------------<br>
#lang web-server/insta<br>
<br>
(require web-server/formlets)<br>
<br>
(define record (hasheq &#39;title &quot;this is a title&quot;<br>
                       &#39;body &quot;post body&quot;))<br>
<br>
(define (start request)<br>
  (edit-record request))<br>
<br>
(define (edit-record request)<br>
  (local [(define (record-formlet our-values)<br>
            (formlet<br>
             (#%# ,{(text-input #:value (string-&gt;bytes/utf-8 (hash-ref our-values &#39;title))) . =&gt; . title}<br>
                  ,{(text-input #:value (string-&gt;bytes/utf-8 (hash-ref our-values &#39;body))) . =&gt; . body})<br>
             (values title body)))<br>
<br>
          (define (handle-response request)<br>
            (define-values (title body)<br>
              (formlet-process our-formlet request))<br>
            (set! record (hasheq &#39;title title<br>
                                 &#39;body body))<br>
            (start (redirect/get)))<br>
<br>
          (define (response-generator embed/url)<br>
            (response/xexpr<br>
             `(html<br>
               (form ([action ,(embed/url handle-response)])<br>
                     ,@(formlet-display our-formlet)<br>
                     (input ([type &quot;submit&quot;]))))))]<br>
<br>
          (send/suspend/dispatch response-generator)))<br>
<br>
----------------------------------------------------------------------<br>
<br>
It seems like this would be a very common pattern... what is the &quot;normal&quot;<br>
way to do it?<br>
<br>
Thanks,<br>
Jordan<br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>Jay McCarthy &lt;<a href="mailto:jay@cs.byu.edu" target="_blank">jay@cs.byu.edu</a>&gt;<br>Assistant Professor / Brigham Young University<br><a href="http://faculty.cs.byu.edu/~jay" target="_blank">http://faculty.cs.byu.edu/~jay</a><br>
<br>&quot;The glory of God is Intelligence&quot; - D&amp;C 93<br>
</div>