自使用 Stripes 多年以来,我们的团队正在编写其第一个 JSF 2.0 应用程序,我对使用 f:ajax 标记和验证输入的最佳方式有一些疑问。
我看到回答的很多问题都有一个带有多个输入的表单,然后是一个提交按钮),但我们希望维护单个输入字段在更改后立即更新并持久保存到数据库(没有提交按钮。我们有这个工作使用 Prototype 的 Ajax.Request 在 Stripes 中很好,但如果可能的话,这是我想避免的额外步骤。
本质上,我们有一个页面,上面有一堆直接由 bean 支持的输入,例如:
<h:inputText id="name" value="#{personController.name}" >
<f:ajax listener="#{personController.ajax}" />
</h:inputText>
您可能知道,在调用侦听器时,bean 上的 name 值已经更改。这会很方便,但我有一些问题:
- 侦听器显然不知道 bean 的哪个值被更改
- 该值已更改,我无法对其执行任何服务器端验证
- 我不知道 name 的旧值是什么,即使我可以对其执行某种验证,我也不知道将值设置回什么
现在看起来我们必须实现某种 javascript 中间人来接收更改的属性和新值,将其发送到 Controller,并让它执行验证、更新数据库、发送回要渲染的内容等. 但就像我说的,这就是我们过去用 Stripes 做的事情,我真的很想用更原生的东西。
我确实看到,如果我们想要页面上的某种提交按钮,我们可以使用 valueChangeListener 属性之类的东西,但我也想避免大量提交。
我包含了 OpenFaces 标记,因为我们已经将它用于数据表,所以如果那里有什么好东西,我们愿意使用它。但据我所知,他们的 o:ajax 标签并不比 JSF 的 f:ajax 强大得多。
谢谢!