最近我偶然发现了以下问题:
使用
使用
yesod
我想
>显示一个应用表单,让用户将他的数据发送给一个特殊的处理程序
>在FormFailure上将浏览器重定向到上一页
>打印错误消息……
> …并重新显示已填充不正确的用户提供数据的表单
就我而言,这就是POST/Redirect/GET
的全部内容.
而点数< 1-3>需要一个简单而直接的实现,我发现无法实现点< 4>!
yesod-form包自动处理此问题,但不允许在表单解析< 2>之间进行任何重定向.和错误处理< 3,4>正如我所希望的那样.
回应Michael Snoyman的回答
您建议我应该序列化提交的数据,并在重定向后以某种方式将其注入表单.这会导致更详细的问题:
>如何获取数据序列化?
我知道我可以使用runRequestBody
:: GHandler的RequestBodyContents,但哪些是相关信息(字段的名称是自动生成的)?
>如何将数据注入表单?
如果你看一下例如aopt
aopt :: Field sub master a -> FieldSettings master -> Maybe (Maybe a) -> AForm sub master (Maybe a)
您将看到它要求默认值与Field的类型相同,因此无法重新插入可能无法正确解析的用户提供的数据.
示例:用户在intField中键入“A”.现在我希望能够在重定向后在同一个字段中显示“A”,但API不允许我这样做.
我该如何处理这个问题?