Coldfusion 中的多步骤表单都有哪些最佳实践?

Posted

技术标签:

【中文标题】Coldfusion 中的多步骤表单都有哪些最佳实践?【英文标题】:What are some best practices for multi-step forms in Coldfusion?Coldfusion 中的多步骤表单有哪些最佳实践? 【发布时间】:2011-04-12 23:55:54 【问题描述】:

我有一个三步表格,其中每个步骤都有自己的动作。操作重定向到下一步。数据存储在会话范围内。我有一个过滤器,可以防止用户通过发布请求以外的任何方式访问表单处理程序。

但是,没有什么可以阻止某人手动输入步骤的地址。为了解决这个问题,我在会话中设置了一个 currentStep 变量。

<!--- Some data is processed here --->
<cfset session.currentStep = "stepTwo">

在第二步中,我将检查结构键:

<cfif NOT session.currentStep = "stepTwo">
<!--- redirect to #session.currentStep# --->

这种方法有效,但它有一个主要缺点:用户无法在浏览器窗口中按下后退按钮,或编辑他或她已经输入的任何数据。

实施多步骤表单的最佳做法是什么?我可以改进我的流程以合并后退按钮功能吗?

【问题讨论】:

使用 JS:coldfusionjedi.com/index.cfm/2010/5/27/… 可惜这个不支持返回键,不过你可以加一下。 Henry,我想过这个问题,但我认为这会让事情变得更复杂。实现服务器端验证成为一个挑战。例如,您如何将用户引导回正确的步骤? 【参考方案1】:

不要使用会话变量只允许他们访问当前步骤,而是允许他们访问当前或以前的步骤。有点像“你能走多远”的标志。

现在,添加指向前面步骤的链接,例如面包屑路径。

最后,在持久存储(数据库、会话、xml、持有包等)中查找已为该表单输入的数据。创建一组空白的表单数据,用持久存储中的任何内容覆盖它,然后用表单范围本身的任何内容覆盖它。比如:

populate = structNew(); // this is the data to populate your form with on load
populate.someValue = "";
structappend(populate, dataFromStorage);
structappend(populate, form); // from things submitted from the form scope, in case validation fails
<input type="text" name="someValue" value="#variables.populate.someValue">

现在,如果有人点击同一个表单步骤两次,他们将看到(按优先顺序)他们提交但未通过验证的值、来自持久数据存储的值,然后是一个空表单。

【讨论】:

【参考方案2】:

如果你愿意,你可以继续使用 Session 方法。

为了解决你的主要缺点,你可以稍微改变你的逻辑。

在最后一步,确保在会话中找到所有步骤的数据。如果没有,将用户重定向到第一个未填写的步骤?应该不会太难。

【讨论】:

以上是关于Coldfusion 中的多步骤表单都有哪些最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 中的多步表单

请问实现VPN的关键技术都有哪些??

反应采取错误验证的多步骤形式

.NET MVC3 中多页表单的最佳实践/设计

Coldfusion,5个表单提交到iframe

ios/iphone sdk 表单管理最佳实践