2010-03-01 25 views
2

我有一个a4j:commandButton它看起来像这样如何使用RichFaces A4J:不使用的commandButton提交

<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" 
    action="#{MyBacking.stop}" value="Stop" /> 
</a4j:commandButton> 

当应用程序部署,按钮点击,stop()方法不会被调用。所有的示例都涉及到表单,但这个按钮并不是一种形式 - 它是用户将用来使服务器运行一些后端逻辑的按钮。目前,该方法是

不使用这种类型的按钮被更新lastOp场,但我没有看到这一个控制台上的任何
public void stopNode() { 
logger.info("STOPPING"); 
setLastOp("Stopped."); 
} 

其他方法。我是否有权将此作为一个按钮?我应该把它放在h:form标签中吗?

Firebug控制台说:

this._form is null 

,我不明白。

任何帮助很好的赞赏。

回答

7

UICommand组件应该放置在UIForm组件内。所以,你的猜测

我应该把这个在h:form标签?

是完全正确的:)这是因为他们火POST请求和对这个唯一的(正常)的方法是使用HTML <form>元素,其method属性设置为"post"。 Firebug还说预计会有一个父表单元素,但它解析为null,因此不会发生任何操作。

只有像h:outputLink这样的“普通香草”链接和配偶不需要表单,因为他们只是触发GET请求。

2

是的,将它包裹在一个表单中。我确信BalusC会在输入我的答案时发布详细的解释。 (是的,它是)

我不得不问,为什么你不只是先尝试​​一个表格,然后张贴在这里。

+0

说实话,我在一次想两件事情,并会有编辑了试过的问题,除了我的工作日结束,我走出了门。 +1为您观察.. – volvox 2010-03-01 20:57:29

1

看看你的代码:

<a4j:commandButton id="stopBtn" type="button" reRender="lastOp" action="#{MyBacking.stop}" value="Stop" /> 

您完成<a4j:commandButton/>,为什么需要一个孤儿</a4j:commandButton>

1

如果由于某种原因,你不希望把一个表单里面的按钮,你可以做这样的事情:

<a4j:commandButton onclick="fireAjax()"/> 

<h:form> 
    <a4j:jsFunction name="fireAjax" action=".."/> 
</h:form> 
相关问题