Как смоделировать сложные многостраничные формы с условными ветвями?

Мне показалось, что большая часть моей работы - это просто создание одного и того же предмета снова и снова.

Это фундаментально сложные многостраничные формы, например. ипотечные заявки, страхование и т.д.

Существует ли общая/хорошо используемая модель для таких вещей? Меня не волнует, какой язык/технология используется. Я думаю, что идеально подходит XML/язык.

Ответ 1

Вы также можете использовать http://www.springsource.org/spring-web-flow:

Spring Web Flow - это расширение Spring MVC, которое позволяет реализовать "потоки" веб-приложения. Поток инкапсулирует последовательность шагов, которые направляют пользователя через выполнение какой-либо бизнес-задачи. Он охватывает несколько HTTP-запросов, имеет состояние, имеет дело с транзакционными данными, является многоразовым и может быть динамичным и продолжительным в природе.

Он отлично интегрирован также в Groovy и Grails (Webflow Doc). Groovy является script -подобным расширением Java, тогда как Grails является webframework, который использует между прочим Spring, Hibernate...

Ответ 2

Лично я использую 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.

Ответ 3

Проект PFBC (PHP Form Builder Class) разработан с учетом следующих целей:

  • Содействие быстрой разработке форм через объектно-ориентированную структуру PHP.
  • Устранить работу grunt/repetitive написания 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. Надеюсь, это поможет...:)

Ответ 4

Я бы не стал быть нейтральным языком. Сосредоточьтесь на таком языке, как 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), которые могут позаботьтесь о некоторых беспорядочных деталях динамических форм для вас.

Ответ 5

Хорошо, если вы не возражаете, какой язык используется, и они заинтересованы в изучении ROR, то здесь приличный учебник по сложным формам, хотя вам потребуется некоторое знакомство с каркасом, чтобы сделать эту работу

Возможно, этот ответ поможет вам найти более простой подход, основанный на jQuery, может быть немного старым

Посмотрите этот многоступенчатый учебник по jQuery, но это похоже на то, что я в конце концов прочитаю во время моего обеда -break позже, поскольку я заинтересован в этом сам.

Там также должен быть идиот-защитный плагин

Ответ 6

Я предполагаю, что вы используете какой-то БД для формирования данных. и то, что вы хотите сделать, это заполнить некоторые данные на первой странице формы, отправить форму, получить вторую страницу и так далее.

Вариант 1. Используйте фреймворк PHP Yii. Он имеет хорошую встроенную поддержку CRUD (форм) и может автоматически создавать простые формы. Что вам нужно сделать, так это настроить действие для перенаправления на следующую форму (вторая страница), а в окончательной форме сохранить все данные. Он также имеет хорошую проверку на основе ajax.
Все, что вам нужно сделать, это подключить ваше приложение к db, чтобы выбрать модель генерации таблицы, а затем создать CRUD. до этого его задача 5-10 минут. Затем вам нужно настроить формы, чтобы определить сценарии для проверки и изменить уже определенные действия для поддержки изменений.
Вы можете попробовать их пример приложения Yii Blog. Он может подробно объяснить процесс.

Вариант 2 - ИСПОЛЬЗОВАТЬ JavaScript. Построенные простые html-формы в соответствии с вашими требованиями. Затем при отправке каждой страницы вызывается JavaScript (кнопка onClick кнопки отправки), которая проверяет форму и сохраняет данные формы в объекте JSON/XML. Вы можете сериализовать его или удерживать в сеансах. При отправке окончательной страницы отправьте все данные JSON/XML (включая данные на последней странице) в вашу форму обработки script/URL в теге действий.