2011-09-05 25 views
0

我有問題生火與Primefaces一個Ajax請求號碼:阿賈克斯內H:graphicImage的

<f:metadata> 
    <f:viewParam name="token" value="#{clientBean.token}"/> 
    <f:event type="preRenderView" listener="#{clientBean.getParameter}" /> 
</f:metadata> 
<h:form> 
    <h:graphicImage id="id1" url="/images/circle-ok.png" onclick="dTag.show();"/> 
    <p:commandButton id="id4" value="T" actionListener="#{clientBean.tag}" /> 

    <!-- This does not work --> 
    <h:graphicImage id="id2" url="/images/circle-ok.png"> 
    <p:ajax id="id3" event="onclick" onstart="dTag.show();" 
      actionListener="#{clientBean.tag}" /> 
    </h:graphicImage> 
</h:form> 

第一h:graphicImage正確打開的對話框中,p:commandButton正確觸發的ActionListener,但p:ajax沒有影響(測試谷歌應用程序引擎)。

更新1 改變event的onclick點擊是絕對正確的(感謝BalusC):現在p:dialog所示。但仍然不調用tag()方法。我更新了xhtml代碼f:metadata,因爲有一個額外的日誌記錄。 我認爲這是關係到p:ajax和bean的調用,我已經試過的ActionListener行動聽衆(從Primefaces的文檔)具有相同的結果:

  • 的應用程序引擎記錄的getParameter(ComponentSystemEvent event)和螢火蟲調用示出了該部分更新:<changes><update id="otCounter"><![CDATA[<span id="otCounter">0</span>]]></update> ..
  • public void tag(ActionEvent ae)調用未登錄(也嘗試public void tag()

p:commandButton正確更新計數器。

更新2 我已經刪除了f:viewParamf:event爲簡單起見,現在正在使用listenerpublic void tag(),但不叫方法:-(

更新3 BalusC的答案是正確的,我在這裏使用它時有其他問題:JSF and p:ajax inside p:dataTable inside ui:repeat

回答

3

事件名稱是錯誤的,它必須是"click"沒有on前綴

<h:graphicImage id="id2" url="/images/circle-ok.png"> 
    <p:ajax id="id3" event="click" onstart="dTag.show();" 
     listener="#{clientBean.tag}" /> 
</h:graphicImage> 

事件的前綴on僅適用於爲事件處理程序提供鉤子的HTML元素屬性的名稱。他們不代表完整的事件名稱。請注意0​​不支持actionListener屬性。它必須是listener並且應該引用一個以AjaxBehaviourEvent作爲參數的方法(沒有參數也非常好)。這與<f:ajax>完全一樣。

+0

感謝BalusC,現在顯示了對話框,但仍未調用我的bean方法。 (我已經更新了這個問題) – Thor

+0

查看答案更新,''不支持'actionListener'。對不起,我沒有立即看到它,因爲我不知道整個PF vdl從頭頂上,並認爲你是正確的。 – BalusC

+0

感謝您的更新,但這個問題仍然讓我發瘋。我已經明確地再次測試了'listener'和'public void tag()'方法,但是這個方法並沒有被調用:-( – Thor