加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

表单 – 使用yesod-form进行POST / Redirect / GET后保持不正确

发布时间:2020-12-14 16:39:04 所属栏目:资源 来源:网络整理
导读:最近我偶然发现了以下问题: 使用 yesod 我想 显示一个应用表单,让用户将他的数据发送给一个特殊的处理程序 在FormFailure上将浏览器重定向到上一页 打印错误消息…… …并重新显示已填充不正确的用户提供数据的表单 就我而言,这就是 POST/Redirect/GET 的全
最近我偶然发现了以下问题:
使用 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不允许我这样做.

我该如何处理这个问题?

解决方法

我个人认为返回带有POST请求的填充表单是可以接受的,这是yesod-form API的优化.如果你想强制重定向表单提交失败,你需要序列化提交的数据并将其存储在某个地方,例如:

>在数据库中.>在用户会话中.>作为您重定向到的URL的查询字符串参数的一部分.请注意,此方法不适用于敏感数据,因为任何中间代理都会缓存表单数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读