2012-02-08 96 views
0

我試圖添加AJAX行爲,使用此代碼selectoneradio更新複選框:從單選按鈕

XHTML:

<h:selectOneRadio id="metalA" converter="metalConverter" value="#{backingBean.metal.metalCode"> 
    <f:selectItems value="#{backingBean.metalCodeRadio}" /> 
    <f:ajax listener="#{backingBean.updateMenu}" event="click" execute="metalA" render="metalTypeMenuA"/> 
</h:selectOneRadio> 

<p:outputPanel id="panelA"> 
    <h:selectOneMenu id="metalTypeMenuA" converter="metalConverter" value="#{backingBean.order.metal}" rendered="#{teklifIslemleriBean.selectedITip == 1}"> 
      <f:selectItems value="#{backingBean.metalDetailsMenu}" /> 
     </h:selectOneMenu> 
</p:outputPanel> 

支持bean:

MetalCode selectedMK = null; 

public void updateMenu(AjaxBehaviorEvent event) {    

     System.out.println("Entered to updateMenu method"); 

     if (metal.getMetalKod()!= null) { 
      electedMK = aMetal.getMetalCode();    
     }   

     if (selectedMK != null) { 
      // metalTypeMenuA Combobox 
      List<Metal> metalList = aService.getAccToMetalCode(null, selectedMK); 
      System.out.println("MetalList:" + metalList.size()); 
      metalTypeMenuA.clear(); 
      for (Metal m : metalList) { 
       metalTypeMenuA.add(new SelectItem(m, "No:" + m.getMetalNo() + " ,Weight: " + m.getWeight(); 
      } 
     } 
    } 

但是它不甚至輸入到updateMenu方法。而不是單擊我試過選擇,更改等。我也試圖把一個包裝面板和更新它而不是複選框,仍然沒有好處。上面的代碼有什麼問題?是否更新了單選按鈕更改的複選框?提前致謝。

JSF 2.0 Primefaces 2.2.1

編輯: 我添加以下

<h:message for="metalA" id="messaged"/> 

<f:ajax listener="#{backingBean.updateMenu}" event="click" execute="metalKoduA" execute="metalA" render="messaged orderPG2"/> 

orderPG2是圍繞複選框的包裝。但是我仍然可以在h:message中發現任何錯誤消息,或者發生任何ajax行爲。

回答

2

<f:ajax>render屬性應該不於由本身通過rendered attribtue渲染條件的服務器端組件。讓它指向總是呈現的最接近的父代。

<f:ajax listener="#{backingBean.updateMenu}" render="panelA" /> 

(注意,我刪除event="click"execute="metalA"那些已經默認)如果仍然無法正常工作,那麼你就需要讀取服務器日誌中是否存在遺漏的面孔

消息。變化很大,你會看到一個Validation Error: "Value is not valid"或者一個轉換錯誤。爲了防止這些消息在ajax呈現過程中被遺漏,請確保您正確使用<h:message>和/或<h:messages>,並且您還將它們包含在<f:ajax>render中。

<h:selectOneRadio id="metalA" ...> 
    ... 
    <f:ajax ... render="metalAmessage panelA" /> 
</h:selectOneRadio> 
<h:message id="metalAmessage" for="metalA" /> 
+0

首先,感謝您的詳細解答。我嘗試渲染包裝複選框的面板組件,但仍然沒有結果。它重新渲染面板,但甚至沒有進入後臺bean中的方法。我讀了服務器日誌,找不到任何相關的日誌條目。我知道那個着名的「價值無效」錯誤!它耗費我2天的時間來找出原因! :)其實我已經在使用。但它不顯示任何錯誤消息。我會嘗試h:消息。 – lamostreta 2012-02-08 13:33:33

+0

我也試過h:消息,但沒有任何事情正在發生..(我添加了上面的代碼) – lamostreta 2012-02-08 14:56:33

+0

我認爲有一個bug與selectoneradio的ajax行爲。工作2天后,我將其更改爲selectonemenu和瞧!它的工作就像一個魅力。 – lamostreta 2012-02-09 15:14:16