0

有没有办法通过右键单击图像来调用 JSF2/Primefaces 5.x 中的支持 bean ajax 方法?Primefaces 中有一个 contextMenu 组件,但它会显示一个我不想要的菜单。

4

2 回答 2

4

使用这个jQuery 代码和 PrimeFaces<p:remoteCommand>你可以做到这一点,这里是简单的代码:

<h:form>
        <p:graphicImage id="myImage" onmousedown="rmc(event)" library="img" name="myImage.png" class="RMC"/>
        <p:remoteCommand name="rightMouseClick" action="#{backingBean.method}" update="myImage"/>
</h:form>
    <script>
        $(document).on("mousedown", ".RMC", function () {
            $(".RMC").each(function () {
                this.oncontextmenu = function () {
                    return false;
                };
            })

            $(".RMC").mousedown(function (e) {
                if (e.button == 2) {
                    rightMouseClick();
                    return false;
                }
                return true;
            });
        });

        function rmc(e) {
            this.oncontextmenu = function () {
                return false;
            };

            if (e.button == 2) {
                rightMouseClick();
                return false;
            }
            return true;
        }
    </script>

它将禁用具有类的图像上的鼠标右键菜单RMC并从支持 bean 调用方法。如果您不想禁用菜单,只需删除.each()部分即可。

编辑:更新 DOM 元素后,它会丢失期间给出的事件,$(document).ready()因此您必须onmousedown直接在组件中添加事件。

EDIT2:已更改$(document).ready(),现在即使在更新后也适用于具有 RMC 类的元素。

于 2015-09-14T20:03:37.733 回答
0

很简单……分解你的问题。首先考虑html。您应该只需通过 jquery 添加右键单击并使用 ap:remoteCommand来调用 backingbean

于 2015-09-14T20:12:17.000 回答