复合组件 - AJAX clientBehaviour

时间:2013-09-02 11:16:40

标签: ajax jsf-2 richfaces composite-component ajax4jsf

我们已经构建了一个由TextInput和Select Box组成的组件。因此,可以通过下拉列表或通过在文本字段中键入值来进行选择。选择后,输入框将自动填充键,如果输入了键,则会显示选择框中的正确项目。

<h:panelGroup rendered="#{cc.attrs.rendered}">
   <div id="#{cc.clientId}" class="abc-select #{cc.attrs.styleClass}" >
          <h:inputText id="input" disabled="#{cc.attrs.disabled}"
            value="#{cc.attrs.value}">
            <a4j:ajax event="change" render="select" />        
          </h:inputText>
          <rich:select disabled="#{cc.attrs.disabled}"
            id="select" value="#{cc.attrs.value}"
            listWidth="#{cc.attrs.listWidth}"
            converter="#{cc.attrs.converter}">          
            <f:selectItems value="#{cc.attrs.items}" var="item"
              itemValue="#{item}" itemLabel="#{item.name}" />
            <a4j:ajax event="selectitem" render="input" oncomplete="setFocusOnInputField();" />           
          </rich:select>
    </div>        
  </h:panelGroup>

然而,当我们传入带有onChange事件的<a4j:ajax event="change" ... />来渲染组件外部元素时。它仅在通过下拉菜单进行选择时有效。

     <abc:myComponent id="idMC" 
      value="#{bean.value}"
      items="#{bean.itemList}"
      converter="#{itemConverter}">
      <a4j:ajax event="change" render="idA idB idC" />
     </kfn:select>

到目前为止,我发现它必须与inputText已经有一个更改<a4j:ajax event="change" render="select" />的a4j元素列表的事实有关。

当我将inputText元素中的ajax元素更改为使用<f:ajax .. />时,它可以正常工作。

有人可以解释为什么会出现这种情况并且有更好的解决方案吗?

0 个答案:

没有答案