我有a4j:commandButton
,看起来像这样
<a4j:commandButton id="stopBtn" type="button" reRender="lastOp"
action="#{MyBacking.stop}" value="Stop" />
</a4j:commandButton>
部署应用程序并单击按钮时,不会调用stop()方法。所有a4j:commandButton
示例都引用表单,但此按钮不在表单中 - 它是用户将用于使服务器运行某些后端逻辑的按钮。目前,方法是
public void stopNode() {
logger.info("STOPPING");
setLastOp("Stopped.");
}
其他不使用此类按钮的方法是更新lastOp字段,但我没有在控制台上看到任何这个。我是否正确将其作为按钮投射?我应该把它放在h:form
标签中吗?
萤火虫控制台说:
this._form is null
我不明白。
任何帮助都很受欢迎。
答案 0 :(得分:7)
UICommand
组件应放在UIForm
组件中。所以,你的猜测
我应该将其放在
h:form
标签中吗?
完全正确:)这是因为它们触发POST
请求,唯一(正常)方式是使用<form>
属性设置为{method
的HTML "post"
元素1}}。 Firebug还表示期望父表单元素,但它已解决为null
,因此无法执行任何操作。
只有h:outputLink
和consorts这样的“普通香草”链接不需要表单,因为它们只会触发GET
请求。
答案 1 :(得分:2)
是的,将其包裹在表格中。我确定BalusC会在我输入答案时发布详细解释。 (是的,那里)
我不得不问你为什么不先发表一张表格,然后再发帖。
答案 2 :(得分:1)
看看你的代码:
<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" action="#{MyBacking.stop}" value="Stop" />
您使用<a4j:commandButton
完成了/>
,为什么需要孤儿</a4j:commandButton>
?
答案 3 :(得分:1)
如果由于某种原因您不想将按钮放在表单中,您可以执行以下操作:
<a4j:commandButton onclick="fireAjax()"/>
<h:form>
<a4j:jsFunction name="fireAjax" action=".."/>
</h:form>