10

我突然想到,我的大部分工作实际上只是一遍又一遍地构建相同的东西。

这些基本上是复杂的多页表格,例如抵押贷款申请、保险等。

是否有此类事情的通用/使用良好的模型?我不在乎使用什么语言/技术。理想情况下,我认为 XML / 语言中立。

4

6 回答 6

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 已被不同的实现所取代,我还没有看过。

如果您想要一个语言中立的、更具声明性的选项,您可以查看XForms。浏览器支持似乎有点被放弃了,但是有XSLT 可以将您的 XForms 转换为 HTML

于 2012-06-20T07:23:46.803 回答
1

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

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

它也完美地集成在 Groovy & Grails ( Webflow Doc ) 中。Groovy 是 Java 的类似脚本的扩展,而 Grails 是使用 Spring、Hibernate 等其他东西的 web 框架......

于 2012-06-18T08:24:27.770 回答
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),可以为您处理动态表单的一些杂乱细节。

于 2012-06-18T07:44:17.367 回答
0

PFBC (PHP Form Builder Class)项目的开发考虑了以下目标:

  • 通过面向对象的 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 表单生成器类项目。希望这可以帮助... :)

于 2012-06-13T10:36:17.837 回答
0

好吧,如果您不介意使用哪种语言,并且对学习ROR感兴趣,那么这里有一个不错的复杂表单教程,尽管您需要熟悉该框架才能使这项工作

也许这个答案会帮助您找到一种更简单的面向 jquery 的方法,可能有点旧

也可以看看这个 jQuery 多步骤表单教程,但它看起来像是我稍后会在午休期间阅读的,因为我有兴趣自己做这个

那里也肯定有一个防白痴插件

于 2012-06-18T08:07:00.197 回答
0

我确实假设您正在使用某种数据库来形成数据。你要做的是在第一页填写一些数据,提交表单获取第二页,依此类推。

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

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

于 2012-06-20T08:31:29.807 回答