Ok I figured out a way using formItRetriver heres how you do it:
1) Make sure you have &store=`1` set on your FormIt snippet call
2) Place a formItRetriver snippet call after the formit one.
3) add a
value="[[+fi.nameofyourinput]]"
to each input in your form
Now when validation fails and the page is refreshed, formItRetriver will populate the form with the previously filed data. Below is my example incase it can help:
[[!FormIt?
&hooks=`recaptcha,spam,email`
&emailTpl=`EmailTemplate`
&emailTo=`[email protected]`
&emailUseFieldForSubject=`1`
&submitVar=`go`
&store=`1`
&successMessage=`Thank you for your communication.`
&successMessagePlaceholder=`fi.successMessage`
&errTpl=`
<small>[[+error]]</small>`
&validate=`name:required, email:email:required, subject:required, message:required:stripTags`
]]
[[!formItRetriver]]
<form class="contact" action="[[~[[*id]]]]" method="post" id="contactform">
<input type="hidden" name="nospam:blank" value="" />
<div class="clearfix forminfo">
[[!+fi.error_message:notempty=`<p><span class="label important">[[!+fi.error_message]]</span></p>`]]
[[!+fi.successMessage:notempty=`<p><span class="label success">[[!+fi.successMessage]]</span></p>`]]
</div>
<div class="clearfix">
<label for="name">Your Name[[!+fi.error.name]]</label>
<div class="input">
<input class="xlarge" id="name" name="name" size="30" type="text" value="[[+fi.name]]"/>
</div>
</div>
<div class="clearfix">
<label for="f-email">Your Email[[!+fi.error.email]]</label>
<div class="input">
<input class="xlarge" id="email" name="email" size="30" type="text" value="[[+fi.email]]" />
</div>
</div>
<div class="clearfix">
<label for="f-subject">Subject[[!+fi.error.subject]]</label>
<div class="input">
<input class="xlarge" id="subject" name="subject" size="30" type="text" value="[[+fi.subject]]"/>
</div>
</div>
<div class="clearfix">
<label for="f-message">Message[[!+fi.error.message]]</label>
<div class="input">
<textarea class="xlarge" id="message" name="message" rows="5">[[+fi.message]]