2015-08-10 4 views
1

Я хочу написать функцию ajax и передать выбранное значение из выпадающего меню выбора в bean. Это то, что у меня есть:Как использовать <a4j:ajax> с помощью <f: selectItems>

<rich:select id="ctpMeasurementUnits" 
    value="#{associationBean.selectedMruId}" 
    defaultLabel="#{msg['classifier.select']}" 
    requiredMessage="#{msg['classifier.measurementUnitRequire']}" 
    validatorMessage="#{msg['common.selectIllegalValue']}"> 
     <f:selectItems 
      value="#{measurementUnitsListBean.allMeasurementUnits}" 
      var="mru" itemLabel="#{mru.mruName}" itemValue="#{mru.mruId}"> 
      <a4j:ajax event="change" execute="@this" listener="#{associationBean.onSelectChangeMru(mru)}" /> 
     </f:selectItems> 
    <f:validateRequired /> 
    <rich:validator /> 
</rich:select> 

Однако, используя этот кусок кода я получаю сообщение об ошибке:

<a4j:ajax> Unable to attach <a4j:ajax> to non-ClientBehaviorHolder parent 

Вопрос: как использовать функцию АЯКС из f:selectItems выпадающего меню?

ответ

3

Вы должны приложить a4j: Аякса к богатым: выберите не е: selectItems

<rich:select id="ctpMeasurementUnits" 
value="#{associationBean.selectedMruId}" 
defaultLabel="#{msg['classifier.select']}" 
requiredMessage="#{msg['classifier.measurementUnitRequire']}" 
validatorMessage="#{msg['common.selectIllegalValue']}"> 
    <f:selectItems 
     value="#{measurementUnitsListBean.allMeasurementUnits}" 
     var="mru" itemLabel="#{mru.mruName}" itemValue="#{mru.mruId}">   
    </f:selectItems> 
    <f:validateRequired /> 
    <a4j:ajax event="change" execute="@this" listener="#{associationBean.onSelectChangeMru(mru)}" /> 
    <rich:validator /> 
</rich:select> 
+0

Если я attach a4j: ajax to rich: select, то он не работает (метод onSelectChangeMru никогда не вызывается) – WheelPot

+0

Тогда возникает совершенно другая проблема, вызывающая это @WheelPot. В своем роде этот ответ напрямую затрагивает проблему, о которой вы сообщали. Любое количество вещей может привести к тому, что действие ajax не будет срабатывать. Посмотрите на консоль javascript и разместите здесь метод прослушивателя, – kolossus

+0

@WheelPot не он должен предотвратить выполнение, но избавиться от параметра, к тому времени, когда слушатель выполнит значение в bean-компоненте, будет уже изменен. (В любом случае параметр равно null). – Makhiel

-3

Изменить его

<f:ajax> 

, и если вы хотите использовать

<a4j:ajax> declare an <a4j:region> and write it down within it. 
+1

Имена тегов и атрибутов, используемые в фрагменте кода вопроса, указывают, что OP использует RichFaces 4.x и, следовательно, не 3.x, как и ожидалось вашим ответом. – BalusC

+0

И даже если он использовал RichFaces 4 * и *, хотел перейти на 'f: ajax', что тоже не указано, это не решит проблему. На самом деле это, вероятно, не сработало бы даже при правильном размещении. – EJP