2012-04-11 54 views
4

我试图在按钮单击上执行JavaScript并同时在后台设置属性。执行JS代码有效,但属性操作侦听器不会被调用。但是,当我删除onclick属性时,单击命令按钮时将在后台设置属性。我也尝试使用actionListener。但同样的问题。这里是我的JSF代码:JSF:一起使用onclick + actionListener

<rich:dataTable value="#{bean.items}" var="item"> 
    <rich:column> 
    <a4j:commandButton value="Upload" onclick="Richfaces.showModalPanel('p-id');return false;"> 
     <f:setPropertyActionListener target="#{bean.targetId}" value="#{item.id}" /> 
    </a4j:commandButton> 
</rich:column> 
// more columns 
</rich:dataTable> 

我在这里错过了什么吗?

+3

return false;在你的onclick阻止继续执行a4j:commandButton,删除返回false; – Daniel 2012-04-11 12:54:52

回答

3

<a4j:commandButton>组件生成一个HTML <input type="submit">元素以及与当前问题无关的一堆JS代码。

将组件的onclick属性生成为同一个HTML元素的onclick属性。 onclick属性通常引用一些JavaScript代码,当在特定的HTML元素上触发HTML DOM click事件时会执行该代码。当最终用户单击HTML元素时,会立即触发此事件,并且这会在调用之前调用HTML元素的默认操作(提交父表单)。更甚者,默认操作可以由JavaScript代码的布尔结果来控制。如果它返回false,则默认操作将不会执行。这就是你的情况。

如果要同时调用在onclick属性的HTML元素<input type="submit">的默认操作的JavaScript代码,那么你必须返回true,或只是为了完全消除return false;件。