JSF:一起使用 onclick + actionListener

JSF: using onclick + actionListener together

本文关键字:onclick actionListener 一起 JSF      更新时间:2023-09-26

我正在尝试在单击按钮时执行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>

我在这里错过了什么吗?

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

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

如果要同时调用 onclick 属性中的 JavaScript 代码 HTML <input type="submit"> 元素的默认操作,则必须返回 true ,或者只是完全删除return false;部分。