Почему слушатель метода опроса не работает, если вызван в шаблоне ui: Composition в PrimeFaces? - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь сделать опрос в PrimeFaces.Почему опрашивающий список не получает вызов, когда он вызывается в <ui:composition template="/pages/layout.xhtml">, и работает, когда он вызывает напрямую.

Вот пример

Я попытался опросить с <ui:composition template="/pages/layout.xhtml"> и без него.Без <ui:composition template="/pages/layout.xhtml"> опроса работает, но с <ui:composition template="/pages/layout.xhtml"> опроса не работает.

layout.xhtml

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<f:view contentType="text/html" locale="en" encoding="UTF-8">
    <h:head>
        <title><ui:insert name="pageTitle">SampleApp</ui:insert></title>
        <f:facet name="first">
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <meta http-equiv="pragma" content="no-cache" />
            <meta http-equiv="cache-control" content="no-cache" />
            <meta http-equiv="expires" content="0" />
        </f:facet>
        <link
            href="${facesContext.externalContext.requestContextPath}/resources/css/styles.css"
            rel="stylesheet" type="text/css" />
        <link
            href="${facesContext.externalContext.requestContextPath}/resources/css/ReportStyle.css"
            rel="stylesheet" type="text/css" />

    </h:head>

    <h:body>
        <h:form id="form" prependId="false" enctype="multipart/form-data">
            <p:layout id="layout" fullPage="true">

                <p:layoutUnit position="north" size="50" resizable="false"
                    closable="false" collapsible="false"
                    style="overflow-x:hidden;overflow-y:hidden">


                    <table>
                        <tr valign="top">
                            <td width='100%'><h:outputText
                                    style="font-weight: bold;font-size: 12px;" immediate="true "
                                    value="SampleApp" /></td>

                            <td><h:outputLink style="font-weight: bold;"
                                    immediate="true"
                                    value="${facesContext.externalContext.requestContextPath}/pages/about.xhtml">About</h:outputLink>
                                <h:outputLink style="font-weight: bold;padding-left:10px"
                                    immediate="true"
                                    value="${facesContext.externalContext.requestContextPath}/pages/contactus.xhtml">Contact</h:outputLink>
</td>
</tr>
<tr>
<td><h:outputText style="font-weight: bold;font-size: 10px;"
                                    immediate="true " value="Welcome, #{loginBean.emailid} " /></td>
                        </tr>

</table>
</p:layoutUnit>
                <p:layoutUnit position="west" resizable="false" closable="false" collapsible="false" size="200">
    <p:menu style="width:95%">

<p:submenu label="Reports">
 <p:menuitem value="Dashboard" onclick="selectComponentLink(this)"                              url="/pages/Report/Dashboard.xhtml" />
</p:submenu>

</p:menu>
</p:layoutUnit>

<p:layoutUnit position="center">
    <p:growl id="growl" life="2000" />
        <ui:insert name="centerContent" />
            </p:layoutUnit>
            </p:layout>
</h:form>
    </h:body>
</f:view>
</html>

Dashboard.xhtml - Опрос не работает

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<ui:composition template="/pages/layout.xhtml">

    <ui:define name="pageTitle">
        <h:outputText value="Suites" />
    </ui:define>

    <ui:define name="centerContent">
        <div class="bodycopy parbase">
            <div style="clear: both"></div>
            <div class="content-body">
                <h:form id="test">
                    <h:panelGrid id="reportId1">
                        <h:outputText id="txt_count" value="#{executionBean.number}" />
                        <p:poll interval="3" listener="#{executionBean.increment}"
                            update="txt_count" />
                    </h:panelGrid>
                </h:form>
            </div>
            <div style="clear: both"></div>
        </div>

    </ui:define>
</ui:composition>
</html>

Dashboard2.xhtml - Опрос работает нормально

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">

<f:view contentType="text/html" locale="en" encoding="UTF-8">
    <h:head>
        <title><ui:insert name="pageTitle">SampleApp</ui:insert></title>
        <f:facet name="first">
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <meta http-equiv="pragma" content="no-cache" />
            <meta http-equiv="cache-control" content="no-cache" />
            <meta http-equiv="expires" content="0" />
        </f:facet>
        <link
            href="${facesContext.externalContext.requestContextPath}/resources/css/styles.css"
            rel="stylesheet" type="text/css" />
        <link
            href="${facesContext.externalContext.requestContextPath}/resources/css/ReportStyle.css"
            rel="stylesheet" type="text/css" />

    </h:head>
    <h:body>
        <h:form id="DashboardForm">
            <h:outputText id="txt_count" value="#{executionBean.number}" />
            <p:poll interval="3" listener="#{executionBean.increment}"
                update="txt_count" />

        </h:form>
    </h:body>
</f:view>
</html>

ExecutionBean.java

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean(name="executionBean")
@SessionScoped
public class ExecutionBean {
        private int number;
        public int getNumber() {
            return number;
        }
        public void increment() {
                System.out.println("number:" + number);
            number++;
        }

}

Фактический результат: Когда я запускаю опрос в Dashboard2.xhtml, он работает как не определенный

И,

Когда я запускаю опрос в Dashboard.xhtml, опрос не работает, поскольку он определен в

1 Ответ

1 голос
/ 03 июля 2019

В вашем примере "не работает" ваш ui:composition определяет h:form, который заканчивается внутри <h:form id="form" prependId="false" enctype="multipart/form-data"> из layout.xhtml, в то время как во втором примере у вас есть только один <h:form id="DashboardForm"> - вложенные формы не допускаются !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...