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

时间:2010-09-16 01:51:49

标签: forms coldfusion multi-step

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

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

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

在第二步中,我会检查一个structkey:

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

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

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

2 个答案:

答案 0 :(得分:2)

如果需要,您可以继续使用Session方法。

要解决您的主要缺点,您可以稍微改变一下逻辑。

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

答案 1 :(得分:2)

不使用会话变量来仅允许它们访问当前步骤,而是允许它们访问当前或以前的步骤。排序“你能走多远”的旗帜。

现在,添加前面步骤的链接,例如面包屑跟踪。

最后,在持久性存储中使用查找(db,session,xml,holding of holding等),以获取已为该表单输入的数据。创建一组空白的表单数据,用持久存储中的任何内容覆盖它,然后用表单作用域本身的任何内容覆盖它。类似的东西:

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">

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

相关问题