【问题标题】: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,我想过这个问题,但我认为这会让事情变得更复杂。实现服务器端验证成为一个挑战。例如,您如何将用户引导回正确的步骤?

标签: forms coldfusion multi-step


【解决方案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 方法。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      相关资源
      最近更新 更多