我们已经构建了一个由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 .. />
时,它可以正常工作。
有人可以解释为什么会出现这种情况并且有更好的解决方案吗?