【问题标题】:<f:ajax> executing different forms<f:ajax> 执行不同的表单
【发布时间】:2014-02-14 03:56:42
【问题描述】:

所以我有 2 个表单和一个带有 f:ajax 的命令按钮。我想在单击按钮时执行第二个表单,但是当我在执行属性上传递表单的 id 时,它似乎忽略了。但是当我用 'execute=":form1"' 替换它时,它运行正确(来自表单的信息被发送到服务器)。有人可以告诉我为什么不能使用第二种形式的 id,或者我该如何实现:用一个按钮从页面执行我想要的任何形式。(因为现在没有信息发送到服务器,只有监听器被调用)。

代码如下:

<h:form id="form1">
    <h:panelGrid id="inputSection" >
        <h:inputText id="input1" value="#{counterMB.number1}" />
    <h:inputText id="input2" value="#{counterMB.number2}" />
    </h:panelGrid>
    <h:outputLabel id="sumResponse2" value="#{counterMB.sum}" />
</h:form>

<h:form id="form2">
    <h:panelGrid id="inputSection" >
        <h:inputText id="input1" value="#{counterMB.number1}" />
    <h:inputText id="input2" value="#{counterMB.number2}" />
    </h:panelGrid>
    <h:outputLabel id="sumResponse2" value="#{counterMB.sum}" />
</h:form>

<h:commandButton value="Sum numbers">
    <f:ajax event="click" execute=":form2" listener="#{counterMB.sum}" render=":form2 :form1"/>
</h:commandButton>

更新: 所以更明确地说:从我读过的内容来看,我可以使用 ajax 来更新/刷新页面的某些部分等,而不是刷新整个页面。我试图做的是将一些组件以不同的形式分组并一次执行一个表单以查看它的行为方式。如果我使用第一个组(表单)的 id,它可以完美地工作,但如果我使用第二个表单的 id(它调用操作但不从任何表单提交任何数据)则根本不起作用。我不明白为什么。 (对于那些声称我缺乏一些知识的人:这就是提问的原因不是吗?我正在尝试学习一些新东西)

【问题讨论】:

  • TBO,我想知道您的 commandButton 是否有效 - 不在任何形式内。而且我不确定您是否可以同时执行/发送两个表单...
  • 你不明白:我不想同时提交 2 个表单或 n 个表单,但我想从 n 个表单的集合中提交某个表单,而不是第一个。正如我上面所说,它适用于第一种形式。我在网络和其他教程/论坛上搜索过这个,我发现其他人抱怨这不起作用(尽管它应该根据 jsf 规范)
  • 所以,请更新您的问题,以便您的目标清晰易懂,并且可以被可能能够帮助您实现目标的人以及其他可能希望稍后实现类似目标的人认可.

标签: ajax jsf jsf-2 mojarra ajaxform


【解决方案1】:

您似乎缺乏 jsf 工作原理的基本知识。命令按钮必须在表单内。并且不可能用一个按钮提交 2 个表单。 f:ajax 的 execute 属性告诉我们要处理哪些组件,例如,如果您有 2 个输入文本,则可以使用该属性只处理一个而忽略另一个。但不可能做你想做的事。

提交 2 个表单并执行一次单个操作方法真的没有意义。拥有 2 个表单没有意义。为什么不将所有内容都放在一个表单中?

【讨论】:

  • 更重要的是,OP 缺乏 HTML 工作原理的基本知识。
【解决方案2】:

在您当前的解决方案中,您在任何h:form 之外使用h:commandButton - 这有点违反HTML 和JSF,所以不要指望它。我的建议是

  • 如果您使用 Richfaces,请在每个表单中添加 a4f:jsFunction 并从任何地方触发生成的 Javascript
  • 如果您使用 Primefaces,请在每个表单中添加 p:remoteCommand 并从任何地方触发生成的 javascript
  • 如果您不使用其中任何一个,请在每个表单中添加&lt;h:commandButton /&gt;,设置隐藏样式并使用javascript提交表单。

希望对你有帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-24
    • 2013-10-30
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2012-01-23
    • 2011-08-23
    相关资源
    最近更新 更多