JSF:一起使用 onclick + actionListener

The*_*heo 5 javascript ajax jsf

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

<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>
Run Code Online (Sandbox Code Playgroud)

我在这里遗漏了什么吗?

Bal*_*usC 4

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

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

如果您想同时调用onclick属性中的 JavaScript 代码HTML<input type="submit">元素的默认操作,那么您必须 return true,或者干脆删除该return false;部分。