我突然想到,我的大部分工作实际上只是一遍又一遍地构建相同的东西。
这些基本上是复杂的多页表格,例如抵押贷款申请、保险等。
是否有此类事情的通用/使用良好的模型?我不在乎使用什么语言/技术。理想情况下,我认为 XML / 语言中立。
我个人使用Django来构建我的表单。我已经完成了复杂的多步骤表单,其中步骤是有条件的,通过使用django.contrib.formtools.FormWizard
和使用工厂函数来为这样的步骤创建 Form 类:
class SomeWizard(FormWizard):
def process_step(self, request, form, step):
if form.is_valid() and step == 0:
#compute step 2
Step2 = second_step_factory(form)
self.form_list[1] = Step2
并在实例化 Wizard 对象时使用占位符进行步骤:
def some_form_view(request):
Step1 = first_step_factory(request)
placeholder = second_step_factory()
return SomeWizard([Step1, placeholder])(request)
在 Django 1.4 中,FormWizard 已被不同的实现所取代,我还没有看过。
如果您想要一个语言中立的、更具声明性的选项,您可以查看XForms。浏览器支持似乎有点被放弃了,但是有XSLT 可以将您的 XForms 转换为 HTML。
您也可以使用http://www.springsource.org/spring-web-flow:
Spring Web Flow 是一个 Spring MVC 扩展,允许实现 Web 应用程序的“流”。流封装了引导用户执行某些业务任务的一系列步骤。它跨越多个 HTTP 请求,具有状态,处理事务数据,可重用,并且本质上可能是动态的和长期运行的。
它也完美地集成在 Groovy & Grails ( Webflow Doc ) 中。Groovy 是 Java 的类似脚本的扩展,而 Grails 是使用 Spring、Hibernate 等其他东西的 web 框架......
我不会尝试保持语言中立。专注于像 CFML 或 PHP 这样能很好地完成这类事情的语言。例如。
<input type="radio" name="type" value='mortgage' onmouseup='updateForm(this)'> Mortgage
<input type="radio" name="type" value='loan' onmouseup='updateForm(this)'> Loan
<cfif form.type eq 'loan'>
<input name="income" type="text">
</cfif>
一个非常简单的例子。您还可以使用基于登录详细信息、数据库值、以前的表单等的逻辑。CFML 还提供高级表单标签(例如cfinput),可以为您处理动态表单的一些杂乱细节。
PFBC (PHP Form Builder Class)项目的开发考虑了以下目标:
示例代码将是:
<?php
//PFBC 2.x PHP 5 >= 5.3
session_start();
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php");
$form = new PFBC\Form("GettingStarted", 300);
$form->addElement(new PFBC\Element\Textbox("My Textbox:", "MyTextbox"));
$form->addElement(new PFBC\Element\Select("My Select:", "MySelect", array(
"Option #1",
"Option #2",
"Option #3"
)));
$form->addElement(new PFBC\Element\Button);
$form->render();
//PFBC 2.x PHP 5
session_start();
include($_SERVER["DOCUMENT_ROOT"] . "/PFBC/Form.php");
$form = new Form("GettingStarted", 300);
$form->addElement(new Element_Textbox("My Textbox:", "MyTextbox"));
$form->addElement(new Element_Select("My Select:", "MySelect", array(
"Option #1",
"Option #2",
"Option #3"
)));
$form->addElement(new Element_Button);
$form->render();
?>
查看PHP 表单生成器类项目。希望这可以帮助... :)
好吧,如果您不介意使用哪种语言,并且对学习ROR感兴趣,那么这里有一个不错的复杂表单教程,尽管您需要熟悉该框架才能使这项工作
也许这个答案会帮助您找到一种更简单的面向 jquery 的方法,可能有点旧
也可以看看这个 jQuery 多步骤表单教程,但它看起来像是我稍后会在午休期间阅读的,因为我有兴趣自己做这个
那里也肯定有一个防白痴插件
我确实假设您正在使用某种数据库来形成数据。你要做的是在第一页填写一些数据,提交表单获取第二页,依此类推。
选项 1 - 使用 PHP Yii 框架。它有一些很好的内置 CRUD(表单)生成支持,它可以自动生成简单的表单。您需要做的是自定义操作以在下一个表单(第二页)上重定向您并在最终表单上保存所有数据。它还具有良好的基于 ajax 的验证。
您需要做的就是将您的应用程序连接到数据库,选择一个表生成模型,然后生成 CRUD。到此为止,这是一个 5-10 分钟的任务。然后,您需要自定义表单定义验证场景并修改已定义的操作以支持更改。
你可以试试他们的示例应用 Yii Blog。它可以详细解释这个过程。
选项 2 - 使用 JavaScript。根据您的要求构建简单的 html 表单。然后在提交每个页面时调用一个 JavaScript(提交按钮的 onClick 事件)来验证表单并将表单数据存储在 JSON/XML 对象中。您可以对其进行序列化或将其保存在会话中。在提交最终页面时,将整个 JSON/XML 数据(包括最终页面上的数据)发送到您的表单处理脚本/动作标记中的 URL。