Ошибки AJAX на странице Primefaces

#jsf #primefaces

Вопрос:

Я пытаюсь эмулировать витрину Primefaces, чтобы получить набор результатов, использующий фильтрацию и расширение строк. Я получаю ошибки всякий раз, когда пытаюсь сделать что-то одно. Страница загружается без ошибок. В примере кода я удалил фильтрацию, чтобы изолировать проблему. Похоже, что каждый раз, когда запускается запрос AJAX, он выдает ошибку. Ошибка возникает при попытке использовать расширение строки, поскольку для извлечения расширенной строки используется вызов AJAX.

Мы используем Primefaces 8.0 на локальном сервере IBM Rad (Eclipse). Результирующий набор извлекается из DB2 с помощью Hibernate, и эта часть работает.

Пожалуйста, помогите, предложив, почему AJAX каждый раз выходит из строя?

 lt;?xml version="1.0" encoding="UTF-8"?gt; lt;!DOCTYPE htmlgt; lt;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"gt; lt;h:headgt;  lt;meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /gt; lt;/h:headgt; lt;h:bodygt;  lt;ui:composition template="/template/maintemplate.xhtml"gt;  lt;ui:define name="title"gt;Search Resultslt;/ui:definegt;  lt;ui:define name="content"gt;  lt;h:form id="formId"gt;  #{searchResultsBean.init}   lt;p:dataTable id="parameterList" var="data"  value="#{searchResultsBean.parameterList}"gt;  lt;p:column style="width:16px"gt;  lt;p:rowToggler /gt;  lt;/p:columngt;  lt;p:column value="#{data.companyId}" gt;  lt;f:facet name="header"gt;  lt;h:outputText value="Company ID" /gt;  lt;/f:facetgt;  lt;h:outputText value="#{data.companyId}" /gt;  lt;/p:columngt;  lt;p:column value="#{data.companyName}" gt;  lt;f:facet name="header"gt;  lt;h:outputText value="Company Name" /gt;  lt;/f:facetgt;  lt;h:outputText value="#{data.companyName}" /gt;  lt;/p:columngt;  lt;p:column value="#{data.alertNumber}"gt;  lt;f:facet name="header"gt;  lt;h:outputText value="Alert Number" /gt;  lt;/f:facetgt;  lt;h:outputText value="#{data.alertNumber}" /gt;  lt;/p:columngt;  lt;p:column value="#{data.comment}"gt;  lt;f:facet name="header"gt;  lt;h:outputText value="Comment" /gt;  lt;/f:facetgt;  lt;h:outputText value="#{data.comment}" /gt;  lt;/p:columngt;  lt;p:rowExpansiongt;  lt;p:panelGrid columns="2" columnClasses="label,value"  style="width:300px"gt;  lt;h:outputText value="Company ID" /gt;  lt;h:outputText value="#{data.companyId}" /gt;   lt;h:outputText value="Company Name" /gt;  lt;h:outputText value="#{data.companyName}" /gt;   lt;h:outputText value="Alert #" /gt;  lt;h:outputText value="#{data.alertNumber}" /gt;   lt;h:outputText value="Alert Description" /gt;  lt;h:outputText value="$#{data.alertNumber}" /gt;  lt;/p:panelGridgt;  lt;/p:rowExpansiongt;  lt;/p:dataTablegt;  lt;/h:formgt;  lt;/ui:definegt; lt;/ui:compositiongt; lt;/h:bodygt;  lt;/htmlgt;  

Ошибка, полученная в консоли:

 ReferenceError: ajaxWaitCursorOn is not defined  

Конкретная ошибка в javascript, сгенерированном примерами:

 $(function(){PrimeFaces.cw("AjaxStatus","widget_j_id878804506_56ad391e",{id:"j_id878804506_56ad391e",delay:0,start:function(){ajaxWaitCursorOn()},success:function(){ajaxWaitCursorOff()}});});  

Примечание 1: Мы попытались изменить его на использование @Inject вместо вызова метода init и получили тот же результат.

Примечание 2. Мы проверили, что jQuery загружен с помощью простого предупреждения в консоли.

Комментарии:

1. ajaxWaitCursorOn-это метод в вашем коде, проверьте, почему он не загружен, если вы используете его в p:ajaxStatus

2. Это метод в коде, сгенерированном примерами, а не в моем коде.

3. Не могли бы вы показать свой бэкэнд? и проверьте, есть ли у вас только одна библиотека primefaces в пути к классу

4. Спасибо ивасанпагу, я тоже подумал о том же и подтвердил все это сегодня утром. Я обнаружил проблему, это был код в шаблоне, который мы загружали. Мы скопировали эту часть из другого проекта. Собираюсь ответить на свой собственный вопрос.

Ответ №1:

Проблема заключалась в этой строке выше: template="/template/maintemplate.xhtml

Он загружал файл шаблона. Мы этого не делали, а скопировали из другого проекта. По какой-то причине в файле шаблона была эта строка: lt;p:ajaxStatus onstart="ajaxWaitCursorOn()" onsuccess="ajaxWaitCursorOff()" /gt;

Я не уверен, что этот ответ представляет ценность для кого-либо, кроме этого: проверьте файлы шаблонов, если они у вас есть.