【问题标题】:How to submit a form using a javascript function in JSF w/ Richfaces, w/o the form name or id?如何使用带有 Richfaces 的 JSF 中的 javascript 函数提交表单,没有表单名称或 ID?
【发布时间】:2011-08-31 10:45:51
【问题描述】:

如果没有来自 javascript 的表单名称或 id,我将如何在 Richfaces 中提交表单?我在想我也许可以使用 jsFunction 标签,但我一直无法弄清楚。

作为说明,我可以在 jsFunction 中设置函数的名称

编辑RF 3.3,JSF 1.2

【问题讨论】:

  • RichFaces 3.3.x 还是 4.x? JSF 1.x 还是 2.x?

标签: javascript jsf richfaces


【解决方案1】:

如果不重复表单 ID 并且不知道表单在 HTML DOM 树中的确切位置(而不是您要提交表单的元素),这是不可能的。

您最多可以使用 EL 函数rich:element()。想象一下,你有一个这样的表格:

<h:form id="myform">

那么您可以在 JS 上下文中使用rich:element(),如下所示(在 JSF 页面中!)将表单作为 HTML DOM 元素获取:

<script>
    var form = #{rich:element('myform')};
    form.submit();
</script>

这个get即生成到HTML如下

<script>
    var form = document.getElementById('myformOrWhateverClientIdItHas');
    form.submit();
</script>

另见:


更新:或者,当表单本身的元素调用 JS 函数时,只需使用this.form 获取相关 HTML DOM 元素的父表单元素。例如

<h:selectBooleanCheckbox onclick="doSomething(this.form)" />

function doSomething(form) {
    // ...
    form.submit();
}

【讨论】:

  • 如果我可以知道表单内元素的 id 是否有可能?也许是隐藏按钮或 jsFunction 之类的?另外,一如既往,非常感谢您的帮助 BalusC。
  • 这完全取决于 JS 上下文。您在哪里以及如何执行 JS 函数?有关示例,请参阅更新的答案。
  • javascript 在表单外部,但我想我可以将您对#{rich:element('myHiddenElementInAForm').form.submit() 的回答结合起来。如果它有效,我会报告。
  • 这个解决方案允许我通过知道表单中元素的 id 从外部提交我的表单!谢谢 BalusC!
【解决方案2】:

使用 a4j:jsFunction 提交时不需要表单名称或 id。

【讨论】:

  • 对,但是我如何让 a4j:jsFunction 提交整个封闭表单而不仅仅是value?也就是说,如何使用 a4j:jsFunction 来触发完整的表单提交?
  • 它总是提交整个表单。
  • 嗯,这不是我的经验,但这是我所期望的。也许还有其他东西打破了生命周期。感谢您的回答,我会进一步研究。
【解决方案3】:

如果你想使用 a4j:jsFunction,不要忘记添加 execute="@form" 以提交所有表单

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-14
    • 2015-01-10
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2012-08-24
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多