2015-09-14 40 views

回答

4

使用this 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類的元素。

+0

謝謝。我似乎無法找到實際創造這樣的答案的動機。總是想知道爲什麼人們不能自己想象這樣的事情。 – Kukeltje

+0

謝謝@Geinmachi。這隻適用於動作方法(與actionListener相比)嗎?我嘗試了actionListener方法(它返回void)。然而,它只有第一次,在方法返回後,右鍵單擊函數/方法沒有在javascript或後臺bean(我把console.log語句放在javascript代碼中)中調用。 – user972391

+0

爲什麼你想要actionListener? – Geinmachi

0

非常簡單...打破你的問題。首先考慮html。你應該簡單地通過jquery添加一個右鍵點擊並使用p:remoteCommand來呼叫支持者