所以我有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(它调用动作但不提交任何形式的任何数据)则完全不起作用。我不明白为什么。 (PS对于那些声称我缺乏一些知识的人:这就是问问题的原因不是吗?我正在尝试学习一些新东西)
答案 0 :(得分:1)
您似乎缺乏jsf如何工作的基本知识。命令按钮必须位于表单内。并且只能通过一个按钮提交2个表单。 f:ajax的属性execute告诉要处理哪些组件,例如,如果您有2个输入文本,则只能处理一个并使用此属性忽略另一个。但是你不可能做你想做的事。
提交2个表单并执行一次单一操作方法并没有多大意义..拥有2个表单没有意义。你为什么不把所有东西都放在一个表格里?
答案 1 :(得分:0)
在您当前的解决方案中,您使用任何h:commandButton
之外的h:form
- 这有点针对HTML和JSF,所以不要指望它。我建议的是
a4f:jsFunction
并从任意位置触发生成的Javascript p:remoteCommand
并从任意位置触发生成的javascript <h:commandButton />
,将样式设置为隐藏,并使用javascript提交表单。希望它有所帮助...