Primefaces Расписание модели загружается с ошибками - PullRequest
0 голосов
/ 10 февраля 2019

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

Я создал представление с компонентом Schedule внутри композиции, например так:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"   
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:p="http://primefaces.org/ui">
    <h:form id="content-form">
        <p:outputPanel id="page-title-myevents">
            <h3>#{translations['pvm_myevents']}</h3>
        </p:outputPanel>

        <h5>#{translations['misc_myscheduler']}</h5>
        <p:schedule id="myScheduler" value="#{myEventsBean.eventModel}" widgetVar="myscheduler" timeZone="#{appSettingsBean.uiTimeZone}">
           <p:ajax event="dateSelect" listener="#{myEventsBean.onDateSelect}" update="myEventDetails" oncomplete="PF('myEventDialog').show();" />
           <p:ajax event="eventSelect" listener="#{myEventsBean.onEventSelect}" update="myEventDetails" oncomplete="PF('myEventDialog').show();" />
           <p:ajax event="eventMove" listener="#{myEventsBean.onEventMove}" update="myEventMessages" />
           <p:ajax event="eventResize" listener="#{myEventsBean.onEventResize}" update="myEventMessages" />
        </p:schedule>
        <p:dialog widgetVar="myEventDialog" header="Event details" modal="true">
        <h:panelGrid id="myEventDetails" columns="2">
            <p:outputLabel for="myEventTitle" value="#{translations['fld_eventtitle']}" />
            <p:inputText id="myEventTitle" value="#{myEventsBean.event.title}" required="true" />

            <p:outputLabel for="myEventFrom" value="#{translations['fld_from']}" />
            <p:calendar id="myEventFrom" value="#{myEventsBean.dateFrom}" timeZone="#{appSettingsBean.uiTimeZone}" pattern="#{appSettingsBean.uiDateTimePattern}" />

            <p:outputLabel for="myEventTo" value="#{translations['fld_to']}" />
            <p:calendar id="myEventTo" value="#{myEventsBean.dateTo}" timeZone="#{appSettingsBean.uiTimeZone}" pattern="#{appSettingsBean.uiDateTimePattern}" />

            <p:outputLabel for="myEventAllDay" value="#{translations['fld_allday']}" />
            <h:selectBooleanCheckbox id="myEventAllDay" value="#{myEventsBean.event.allDay}" />

            <p:commandButton id="myEventResetForm" type="reset" value="#{translations['btn_reset']}" />
            <p:commandButton id="myEventUpdate" value="Save" action="#{myEventsBean.addEvent}" oncomplete="PF('myscheduler').update();PF('myEventDialog').hide();" />
        </h:panelGrid>
        </p:dialog>
        <p:messages id="myEventMessages" showDetail="true" closable="true">
            <p:autoUpdate />
        </p:messages>
        <hr></hr>
    </h:form>
</ui:composition>

У меня есть различные композиции, и все они загружаются внутримой dashboard.xhtml примерно так:

<!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:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui">
<ui:include src="/themes/theme.xhtml"/>
<h:body>
    <ui:insert name="header" >
        <ui:include src="/main-dashboard/my-topnav.xhtml"/>
    </ui:insert>
    <ui:insert name="content" >
        <ui:include src="/main-dashboard/my-sidenav.xhtml"/>
        <p:outputPanel id="dashboard-container">
            <ui:include src="/main-dashboard/my-sidenavtoggler.xhtml"/>
            <p:outputPanel id="content-window">
                <p:outputPanel id="content-panel">
                    <ui:include src="#{contentLoaderBean.mainContent}" />
                </p:outputPanel>
            </p:outputPanel>
        </p:outputPanel>
    </ui:insert>
</h:body>
</html>

Это моя первая композиция, которая на самом деле построена (другие еще пусты).Я загружаю в него простую ScheduleModel на @ PostConstruct внутри компонента @ ViewScoped .Поскольку в моей базе данных еще не было бы никаких событий, я установил модель следующим образом: setEventModel(new DefaultScheduleModel());

ПЕРВЫЙ ВЫПУСК : Если я поместил несколько случайно сгенерированных событий в модель,иногда они отображаются в виде, иногда нет.Я не понимаю, почему это вообще происходит.Я не получаю никаких ошибок в консоли Java или Javascript, это просто случайно.Ленивая модель работает так же.

ВТОРОЙ ВЫПУСК : пустая или полная модель расписания, не имеет значения.Когда страница загружается, я обычно получаю предупреждение Javascript:

jquery.js.xhtml? Ln = primefaces & v = 6.2: 4 [Устаревание] Синхронный XMLHttpRequest в основном потоке устарел из-за его вредных эффектовдо опыта конечного пользователя.Для получения дополнительной помощи, проверьте https://xhr.spec.whatwg.org/

enter image description here

ТРЕТИЙ ВЫПУСК : Возможно, вы заметили, у меня также есть диалогвнутри формы контента.Это диалоговое окно запускается при событии выбора даты, и когда я пытаюсь выбрать дату из компонента datepicker, он выдает интересную ошибку Javascript (необработанную ошибку типа), например: enter image description here

Это интереснопотому что, если я пытаюсь сделать то же самое в Firefox, он выдаст другую ошибку, например: enter image description here

Microsoft Edge вообще не выдает ошибки .

УВЕДОМЛЕНИЕ : Datepicker также может быть проблемой, так как он не появляется при загрузке расписания и показывает модель со случайно сгенерированными данными.Если планировщик не может загрузить модель, всплывающее окно datepicker выдает ошибку типа uncaught type, когда выбрана какая-либо дата.

Неважно, какую дату выбрать, выбрасываются ошибки.Поскольку запросы Ajax не запускаются правильно, методы bean-компонентов вообще не запускаются, поэтому я думаю, что это должно быть что-то на стороне представления, которое необходимо исправить правильно.

Я пробовал и отключил всепользовательский импорт css и js (использую Bootstrap 4.2.1 css и js для целей проектирования) и очищенные вручную каталоги развертывания.Я также удостоверился, что мой проект загружен без старых ресурсов, очистив историю браузера и кеш.До сих пор мне не удавалось исправить эти проблемы (все предупреждения и ошибки остались прежними). ​​

Я не знаю, связаны ли все три проблемы или нет, но я разместил их в одном посте.Иногда решая одну проблему, решает и другие.Поскольку все они происходят в одном составе, это может быть снова.

Дайте мне знать, если я могу предоставить более подробную информацию любым способом, и я сделаю то, что могу.

СпасибоВы.

РЕДАКТИРОВАТЬ : Основано на полученных комментариях от @Melloware.Обновление Primefaces 6.2 до Primefaces 7-RC2 решило некоторые проблемы для меня.Предупреждения об устаревании и необработанные ошибки типов исчезли.Первая проблема все еще остается.Компонент расписания не отображает объекты расписания или «события».В режиме отладки я обнаружил, что объекты расписания создаются и передаются в модель расписания.Все, что мне сейчас нужно, это компонент вида, чтобы показать их.

1 Ответ

0 голосов
/ 10 февраля 2019

Поскольку я смог решить последний фрагмент моей головоломки, Расписание не отображает объекты моего расписания , я напишу полный ответ на мой вопрос.

Ответ предоставлен @Melloware помог мне продвинуться вперед с моим основным дизайном.При обновлении Primefaces 6.2 до Primefaces 7-RC2 были удалены предупреждения об устаревании и необработанные ошибки типа.Теперь я смог найти и реализовать решение для моей последней проблемы, загружая объекты расписания.

Я допустил ошибку новичка, загружая свое содержимое через компонент загрузки контента.Чтобы быть точным, я реализовал навигацию по контенту, одновременно нажимая ссылки на мой компонент загрузчика контента, который обрабатывает то, что должно быть загружено следующим при выполнении действия навигации.Навигационные действия должны вызываться со свойствами Action из компонентов CommandLink.Вот где я допустил ошибку в дизайне.Вместо этого я использовал свойство ActionListener, что привело к ситуации, когда мой контент не загружался должным образом.

Вот цитата из сообщения @BalusC, в котором мои колеса снова вращались:

Метод действия может (таким образом, не должен) возвращать строку, которая будет использоваться в качестве результата навигации (целевое представление).Возвращаемое значение null или void позволит ему вернуться на ту же страницу и сохранить текущую область просмотра.Возвращаемое значение пустой строки или того же идентификатора представления также вернется на ту же страницу, но заново создаст область просмотра и, таким образом, уничтожит все активные в настоящее время компоненты области видимости и, если применимо, создаст их заново.

Полный пост можно найти здесь: Различия между действием и действием.

Сегодня я узнал что-то новое.

Спасибо!

...