Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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组合组件和ajax事件,使用内部和嵌套ajax侦听器_Ajax_Jakarta Ee_Jsf 2.2_Composite Component_Java Ee 8 - Fatal编程技术网

JSF组合组件和ajax事件,使用内部和嵌套ajax侦听器

JSF组合组件和ajax事件,使用内部和嵌套ajax侦听器,ajax,jakarta-ee,jsf-2.2,composite-component,java-ee-8,Ajax,Jakarta Ee,Jsf 2.2,Composite Component,Java Ee 8,我试图创建一个复合组件,允许用户输入日期(通过primefaces日历组件)和/或整数(通过primefaces inputnumber组件),表示参考日期和用户输入日期之间的间隔(以天为单位)。 要链接的日历和inputNumber组件,当其他组件发生更改时,应呈现每一个组件 下面是它的样子: 问题似乎是嵌套的p:ajax接管了同一事件的内部p:ajax。这是正常的行为吗?有没有一种方法可以让一个事件有两个监听器,一个在复合组件内部,一个在必要时嵌套 InputDateCart.xhtml-

我试图创建一个复合组件,允许用户输入日期(通过primefaces日历组件)和/或整数(通过primefaces inputnumber组件),表示参考日期和用户输入日期之间的间隔(以天为单位)。 要链接的日历和inputNumber组件,当其他组件发生更改时,应呈现每一个组件

下面是它的样子:

问题似乎是嵌套的p:ajax接管了同一事件的内部p:ajax。这是正常的行为吗?有没有一种方法可以让一个事件有两个监听器,一个在复合组件内部,一个在必要时嵌套

InputDateCart.xhtml-组件及其内部组件的定义


之后
index.xhtml-复合组件及其嵌套


现在:-
下一步:
您可以在这里找到一个最小的工作示例

运行mwe时,您会发现嵌套的p:ajax捕获了“change”事件,从而阻止了内部p:ajax的执行及其对cc.updateDate或cc.updateInterval的调用。但不会捕获dateSelect并更新间隔

实际上,我还有第二个问题,我还没有尽力解决它,但是如果你有答案,我会接受它:在index.xhtml中,这一行
似乎没有更新支持bean中的值
{index.next}
,我是不是误报了什么

非常感谢

<ui:component xmlns="http://www.w3.org/1999/xhtml"
              xmlns:h="http://xmlns.jcp.org/jsf/html"
              xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
              xmlns:p="http://primefaces.org/ui"
              xmlns:cc="http://xmlns.jcp.org/jsf/composite">
    <cc:interface componentType="inputDateEcart">
        <cc:attribute name="value" type="java.time.LocalDate" shortDescription="Selected date" required="true" />
        <cc:attribute name="reference" type="java.time.LocalDate" shortDescription="Reference date" required="true" />
        <cc:attribute name="disabled" type="java.lang.Boolean" />
        <cc:attribute name="style" type="java.lang.String" />
        <cc:attribute name="styleClass" type="java.lang.String" />
        <cc:clientBehavior name="change" default="true" targets="interval date" event="change" />
    </cc:interface>

    <cc:implementation>
        <div id="#{cc.clientId}" style="#{cc.attrs.style}" class="ui-inputgroup #{cc.attrs.styleClass}">
            <span class="ui-inputgroup-addon">After</span>
            <p:inputNumber id="interval"
                           binding="#{cc.interval}"
                           decimalPlaces="0"
                           disabled="#{cc.attrs.disabled}"
                           required="#{cc.attrs.required}"
                           style="max-width: 50px;">
                <p:ajax process="@this" update="date, weekDay" listener="#{cc.updateDate}" />
            </p:inputNumber>
            <h:outputText id="weekDay" binding="#{cc.weekDay}" styleClass="ui-inputgroup-addon" style="text-align: start"/>
            <p:calendar id="date"
                        binding="#{cc.date}"
                        navigator="true"
                        mindate="#{cc.attrs.reference}"
                        disabled="#{cc.attrs.disabled}"
                        required="#{cc.attrs.required}">
                <p:ajax process="@this" update="interval, weekDay" listener="#{cc.updateInterval}" />
                <p:ajax event="dateSelect" process="@this" update="interval, weekDay" listener="#{cc.updateInterval}"  />
            </p:calendar>
        </div>
    </cc:implementation>
</ui:component>
<h:form id="intervalForm">
    <p:outputLabel for="next" label="Next date" />
    <cc:inputDateEcart id="next"
                       value="#{index.next}"
                       reference="#{index.date}">
        <p:ajax process="@this" update="intervalForm:test" />
    </cc:inputDateEcart>
    <p:outputPanel id="test" styleClass="test" style="margin-top: 15px">
        Now : <h:outputText value="#{index.now}" style="font-weight: bold" /> -
        Next : <h:outputText value="#{index.next}" style="font-weight: bold" />
    </p:outputPanel>
</h:form>