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 中的多步骤表单都有哪些最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章