Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何使用<;a4j:ajax>;与<;f:选择项目>;_Jsf_Richfaces_Ajax4jsf - Fatal编程技术网

Jsf 如何使用<;a4j:ajax>;与<;f:选择项目>;

Jsf 如何使用<;a4j:ajax>;与<;f:选择项目>;,jsf,richfaces,ajax4jsf,Jsf,Richfaces,Ajax4jsf,我想编写ajax函数,并将选择下拉菜单中的选定值传递给bean。 这就是我所拥有的: <rich:select id="ctpMeasurementUnits" value="#{associationBean.selectedMruId}" defaultLabel="#{msg['classifier.select']}" requiredMessage="#{msg['classifier.measurementUnitRequire']}" vali

我想编写ajax函数,并将选择下拉菜单中的选定值传递给bean。 这就是我所拥有的:

<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
无法附加到非ClientBehaviorHolder父级

问题:如何从
f:selectItems
下拉菜单中使用ajax功能?

您必须将a4j:ajax附加到rich:select not 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}">        
    </f:selectItems>
  <f:validateRequired />
  <a4j:ajax event="change" execute="@this" listener="#{associationBean.onSelectChangeMru(mru)}" />
  <rich:validator />
</rich:select>

您必须将a4j:ajax附加到rich:select而不是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}">        
    </f:selectItems>
  <f:validateRequired />
  <a4j:ajax event="change" execute="@this" listener="#{associationBean.onSelectChangeMru(mru)}" />
  <rich:validator />
</rich:select>

将其更改为

<f:ajax> 

如果你想使用

<a4j:ajax> declare an <a4j:region> and write it down within it.
声明并在其中写下。
将其更改为

<f:ajax> 

如果你想使用

<a4j:ajax> declare an <a4j:region> and write it down within it.
声明并在其中写下。

问题代码片段中使用的标记和属性名称表明,OP使用的是RichFaces 4.x,而不是您的答案所预期的3.x。即使他使用的是RichFaces 4,并且希望迁移到
f:ajax
,这也没有说明,这也无法解决问题。事实上,即使放置正确,它也可能根本不起作用。问题代码片段中使用的标记和属性名称表明,OP使用的是RichFaces 4.x,因此不是您的答案所期望的3.x。即使他使用的是RichFaces 4,并希望迁移到
f:ajax
,但也没有说明,这并不能解决问题。事实上,即使放置正确,它也可能根本不起作用。如果我将a4j:ajax附加到rich:select,那么它就不起作用(永远不会调用onSelectChangeMru方法),那么就有一个完全不同的问题导致@WheelPot。目前,这个答案直接解决了您报告的问题。很多事情都可能导致ajax操作无法启动。查看javascript控制台并在此处发布侦听器方法,@WheelPot不是应该阻止执行的方法,而是删除参数的方法,当侦听器执行bean中的值时,该方法将已经更改。如果我将a4j:ajax附加到rich:select,那么它就不起作用(永远不会调用onSelectChangeMru方法),那么就有一个完全不同的问题导致@WheelPot。目前,这个答案直接解决了您报告的问题。很多事情都可能导致ajax操作无法启动。查看javascript控制台并在此处发布侦听器方法,@WheelPot不是应该阻止执行的方法,而是删除参数的方法,当侦听器执行bean中的值时,该方法将已经更改。(参数仍然为空)。