2015-08-20 7 views
2

我打算在我的web应用程序中使用许多类似向导的表单。该应用程序是在Spring MVC中用Thymeleaf构建的视图,并且在这里和那里都有一些Spring Integration。在客户端状态下在Spring MVC中创建多页表单的建议策略

我看了Spring Webflow作为一个可能的解决方案,但我绝对不喜欢它的有状态部分。我的应用程序的其余部分完全是无状态的,我一定希望保持这种状态。

有没有可能的解决方案呢?例如,以某种方式使用Spring Webflow以前面的屏幕信息以某种隐藏形式保存的方式,或者我不得不为我的网站上的每个“向导”推出自定义表单解决方案?

我不能把它变成一个大单,因为我需要验证之后的第二位前的第一位可以填写。

这是我目前拥有的情况下(和将复制一对夫妇时间在网站上)

你有第一种形式,你可以输入一些问题的答案,进入后,这些应该被验证,你应该被带到另一个页面,带有一些其他问题,小文本的内容取决于第一页上回答的问题(第二页上的问题仍然相同)。在回答这些问题之后,他们也应该被验证,这会带来第三种形式,这基本上就是支付形式。

+0

使用客户端...将其存储在客户端...使用JavaScript框架来创建您的向导,并在客户端之间存储数据。在你的向导结尾处一次性发布所有内容。从理论上讲,你可以取代Spring Web Flow的部分功能,让它将客户端的状态存储在一个cookie中,但是Cookie不安全并且大小有限,更不用说每个请求都会向服务器提供一些开销。 –

+0

如果您需要存储状态,则您的应用程序不是无状态的。可以将其存储在服务器上或客户端上。如果数据是敏感的或某些部分不应该由客户端更改,那么您需要将其存储在服务器上 –

+0

我可能说错了,我只是不想在我的服务器端的状态:-)绝对不会看转移到一个Javascript框架......也许我应该把整个事情变成一个大规模的形式,把它拆分成div,并使用show/hide来构建它,同时对表单的一部分进行AJAX检查。不知何故。 – Kristof

回答

0

正如M. Deinum写的,你应该看看一些javascript框架。一个好的解决方案是使用AngularJS和UI-Router扩展。这使您可以创建一个状态机,使您的向导高度可读。

例如,向导中步骤的定义可能与UI-Router getting started section中显示的内容类似。您只需在每个状态转换中发布当前状态的数据以进行验证。这可以通过使用新状态的resolve属性发布数据来实现。通过这种方式,发布数据所产生的任何承诺都将在转换实际运行之前得到解决。当验证失败时,您可以使用错误处理程序将用户发送回上一步。

+1

我有AngularJS 1的使用经验。3,我知道它有能力做到这一点,但说实话,我绝对不希望使用Javascript框架来做到这一点。我完全不相信他们的管理方式。 – Kristof