复合组件的Ajax事件未触发

时间:2018-08-20 11:54:38

标签: jsf primefaces jsf-2 jsf-2.2

我创建了一个复合组件,其中包含一个简单的素数inputText并附加了一些验证。

为了对此复合材料附加ajax事件,我定义了一个composite:clientBehaviour,如下所示:

<composite:interface>
    <composite:attribute name="value" type="java.lang.String" />
    <composite:attribute name="update" type="java.lang.String" />
    <composite:editableValueHolder name="ipAddressInput" targets="#{cc.clientId}:ipAddressInput" />
    <composite:clientBehavior name="update" targets="#{cc.clientId}:ipAddressInput" event="blur" />
</composite:interface>

<composite:implementation>
            <p:inputText placeholder="xxx.xxx.xxx.xxx" id="ipAddressInput" value="#{cc.attrs.value}" validatorMessage="Invalid IPV4 Address">
                <p:keyFilter regEx="/[0-9.]/i" />
                <f:validator validatorId="com.db.nms.app.netappls.validation.faces.IpV4Validator" />
            </p:inputText>
</composite:implementation>

当我将此复合材料添加到页面并定义ajax事件时:

<netappls:ipV4Input id="ipInputCC" value="#{addInterfaceIpDialogBean.addressForm.ipAddress}">
    <p:ajax update="maskInput" listener="#{addInterfaceIpDialogBean.onUpdateIp}" />
</netappls:ipV4Input>

在模糊时不会调用侦听器。 只需将inputText复制到我使用复合文件的位置,然后定义ajax事件即可,就像调用监听器一样。

我还尝试设置不同的过程并更新ajax元素上的过滤器。没事。 当我将imediate =“ true”添加到ajax元素时,它将触发但该值不会更新。

我的第一个想法是,它与验证程序有关。但是删除验证器也不会改变任何内容。

知道我在做什么错吗?

该复合材料将在使用primefaces对话框框架的对话框页面中使用。

1 个答案:

答案 0 :(得分:0)

您在Composite:clientBehavior和输入ID中具有不同的ID映射。尝试统一它们:

<composite:clientBehavior name="update" targets="ipAddressInput" event="blur" />