如何使用条件分支对复杂的多页表单进行建模?

时间:2012-06-01 15:45:29

标签: html forms

我发现,我的大部分工作都是一次又一次地建造同样的东西。

这些基本上是复杂的多种形式,例如抵押贷款申请,保险等。

对于这样的事情,是否存在通用/良好使用的模型?我不关心使用什么语言/技术。我理想的是XML /语言中立。

6 个答案:

答案 0 :(得分:1)

您还可以使用http://www.springsource.org/spring-web-flow

  

Spring Web Flow是一个Spring MVC扩展,允许实现Web应用程序的“流程”。流程封装了一系列步骤,指导用户执行某些业务任务。它涵盖多个HTTP请求,具有状态,处理事务数据,可重用,并且可能是动态的,并且可以长期运行。

它完美地集成在Groovy& GrailsWebflow Doc)。 Groovy是Java的类似脚本的扩展,而Grails是使用Spring,Hibernate之类的webframework ......

答案 1 :(得分:1)

我个人使用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由replaced实现了不同的实现,我还没看过。

如果您想要一个语言中立,更具声明性的选项,您可以查看XForms。浏览器支持似乎有点遗弃,但有XSLTs that will transform your XForms into HTML

答案 2 :(得分:0)

PFBC (PHP表单构建器类)项目的开发考虑了以下目标:

  • 通过面向对象的PHP结构促进表单的快速开发。
  • 在构建表单时,消除编写html和验证的笨拙/重复性工作。使用一致/测试的实用程序导致人为错误。

示例代码为:

<?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 Form Builder Class Project。希望这有助于...:)

答案 3 :(得分:0)

我不会尝试语言中立。专注于像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),它可以为您处理动态表单的一些混乱细节。 / p>

答案 4 :(得分:0)

好吧,如果你不介意使用哪种语言,并且有兴趣学习ROR,那么这里有一个不错的complex forms tutorial,虽然你需要熟悉这个框架才能使这个工作

也许this answer会帮助你找到一个更简单的面向jquery的方法,可能有点旧

看一看this jQuery multi-step form tutorial,但看起来我最后会在午休时间阅读,因为我有兴趣自己这样做

那里肯定会有一个防止傻瓜的插件

答案 5 :(得分:0)

我假设你使用某种数据库来形成数据。你想要做的是在表格第一页填写一些数据,提交表格到第二页等等。

选项1 - 使用PHP Yii框架。 它有一些很好的内置CRUD(表单)生成支持,它可以自动生成简单的表单。您需要做的是自定义操作以在下一个表单(第二页)上重定向您,并在最终表单上保存所有数据。它还具有良好的基于​​ajax的验证 您需要做的就是将您的应用程序连接到db选择表生成模型然后生成CRUD。这是一个5-10分钟的任务。然后,您需要自定义表单定义方案以进行验证,并修改已定义的操作以支持更改 你可以尝试他们的sample app Yii Blog。它可以详细解释这个过程。

选项2 - 使用JavaScript。 根据您的要求构建简单的html表单。然后在提交每个页面时调用一个JavaScript(提交按钮的onClick事件)来验证表单并将表单数据存储在JSON / XML对象中。您可以将其序列化或在会话中保留。在提交最终页面时,将整个JSON / XML数据(包括最终页面上的数据)发送到操作标记中的表单处理脚本/ URL。