2012-02-08 2 views
0

Я пытаюсь добавить АЯКС поведение 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> 

резервного боб:

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

EDIT: я добавил следующие

<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

render атрибут <f:ajax> должен не точки к компоненту, который сам по себе условно на стороне сервера, оказываемая rendered attribtue. Пусть он указывает на ближайший родитель, который всегда отображается вместо него.

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

(обратите внимание, что я удалил event="click" и execute="metalA", как те значения по умолчанию уже)

Если это все еще не работает, то вы должны прочитать журналы сервера для любых отсутствующих лиц Сообщения. Большое изменение, что вы увидите Validation Error: "Value is not valid" или, возможно, ошибку преобразования. Чтобы эти сообщения не были пропущены во время рендеринга ajax, убедитесь, что вы правильно используете <h:message> и/или <h:messages> и что вы также включаете их в render из .

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

Во-первых, спасибо за подробный ответ. Я попытался отобразить компонент панели, который обертывает флажок, но результата нет. Он повторно отображает панель, но даже не входит в метод в бэкэнде. Я прочитал журналы сервера, не смог найти соответствующую запись в журнале. Я знаю, что известная ошибка «Value is not valid»! Мне стоило 2 дня, чтобы узнать причину этого! :) На самом деле я уже пользуюсь . Но в нем нет сообщения об ошибке. Я попробую h: message. – lamostreta

+0

Я также пробовал h: сообщение, но ничего не происходит .. (я добавил код выше) – lamostreta

+0

Я думаю, что есть ошибка с ajax-поведением selectoneradio. Через 2 дня я меняю его на selectonemenu и вуаля! Оно работало завораживающе. – lamostreta

Смежные вопросы