【发布时间】:2010-11-06 02:40:02
【问题描述】:
我正在使用 jsf 1.2。当一个特定的 jsp 有多个具有指定 id 的表单时,例如当使用类似下面的东西时,jsf 会给表单一个看似随机的 id。
<ui:repeat>
<h:form id="repeatingform">
...
我想使用 javascript 提交所有表单。有没有办法在不知道表单 ID 的情况下做到这一点?
【问题讨论】:
标签: javascript forms jsf
我正在使用 jsf 1.2。当一个特定的 jsp 有多个具有指定 id 的表单时,例如当使用类似下面的东西时,jsf 会给表单一个看似随机的 id。
<ui:repeat>
<h:form id="repeatingform">
...
我想使用 javascript 提交所有表单。有没有办法在不知道表单 ID 的情况下做到这一点?
【问题讨论】:
标签: javascript forms jsf
一次提交多个表单实际上是不可能的。问题是每个表单都需要自己的单独请求 - 提交表单基本上类似于单击链接,并且您不能一次打开页面上的所有链接(您可以通过在新选项卡/窗口中打开它们,但那是另一回事)
如果您确实希望将每个表单保留为单独的表单元素,您可以使用 Aquatic 的示例,
var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++)
forms[i].submit();
但是将运行submit() 的代码替换为使用XMLHttpRequest 提交表单的代码。您可以在后台运行多个 XMLHttpRequest。
【讨论】:
嗯,它不会那么容易工作。如果你会使用类似 document.form1.submit();它发布了特定的表格和其中的所有值。 因此,循环遍历所有表单并提交每一个表单是没有用的。 这与单击每个表单的提交按钮相同,导致每个表单单独发布。 解决方法是将每个表单中每个字段的值收集到一个收集器表单中,然后发布收集器表单。 您可以在此处阅读(带有代码示例!)更多信息:http://www.codetoad.com/forum/15_24387.asp
【讨论】:
您可以通过下一种方式访问页面上的所有表单
var forms = document.getElementsByTagName("FORM");
for (var i=0; i<forms.length; i++)
forms[i].submit();
【讨论】:
我认为这个问题有几个部分。 1. 您是否尝试在 JSF 中提交多个表单?有一种方法可以将组件分隔成不同的形式,然后在需要时提交一组选定的组件。外部标签可能是,在这些标签内,您可以拥有任意数量的标签。 (请知道 t:subform 是一个 tomahawk 库;但它适用于 JSF)。也可以使用t:commandButton 在选定的组中提交子表单。 请注意关于子表单 deocumentation 的最后一段,所有带有逗号分隔 id 的表单都可以提交。所以例如 这里有一些输入控件
更多控制在这里
整个洛塔控制在这里
这样的事情将允许您只为您希望验证的表单提交选择性表单和验证组件。如果这就是你真正想要做的。
但是,如果您真的打算通过一个 java 脚本提交这些表单,我有一个小建议,javascript 支持在 dom 树中动态查找表单标签,如上图所示的aquatic。您还可以通过实现在“RENDER_RESPONSE”阶段之前调用的 PhaseListener 来遍历这些 ui 元素,然后遍历 ComponentUITree 以获取所有 UI 组件的名称或列表,然后通过 JSP 2 的脚本变量或 $ 变量将它们提供给 javascript支持。
如果你能准确地列出你的问题,我可以给出更详细的答案或例子,关于为什么你想要一个通用的 java 脚本,你是打算并行提交多个表单还是打算一次提交一个(如并在需要时)但通过一段普通的 java 脚本。
HTML 表单组件的并行提交实际上是不可能的,除非您使用 javascript 从所有表单中累积组件值,然后进行大量手动操作。
请详细说明您的实际意图。
【讨论】: