Primefaces 安排模型加载错误

Primefaces Schedule model loads with errors

我现在使用 Primefaces 6.2 Schedule 组件已经有几天了,但我找不到使用该组件解决我的问题的答案。关于这件事,我需要一些技术建议。

我在这样的组合中创建了一个带有 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>

这是我第一个真正构建的作品(其他的还是空的)。我在 @ViewScoped bean 中的 @PostConstruct 上加载了一个简单的 ScheduleModel。 因为我的数据库中还没有任何事件,所以我这样设置模型:setEventModel(new DefaultScheduleModel());

第一个问题:如果我将一些随机生成的事件放入模型中,有时它们会显示在视图中,有时则不会。我完全不明白为什么会这样。我在 Java 或 Java 脚本控制台中没有收到任何错误,这只是随机的。惰性模型的工作原理相同。

第二个问题:空的或满的 Schedule 模型,并不重要。当页面加载时,我通常会收到 Java 脚本警告:

jquery.js.xhtml?ln=primefaces&v=6.2:4 [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/

第三期:您可能已经注意到我在内容表单中也有一个对话框。此对话框在日期 select 事件上触发,当我尝试 select 来自日期选择器组件的日期时,它会抛出一个有趣的 Java 脚本错误(未捕获的类型错误),如下所示:

这很有趣,因为如果我尝试在 Firefox 上做同样的事情,它会抛出一个不同的错误,如下所示:

Microsoft Edge 根本不会抛出错误

注意: Datepicker 也可能是一个问题,因为它不会在计划加载时弹出并显示具有随机生成数据的模型。如果调度程序无法加载模型,日期选择器将弹出并在任何日期 selected.

时抛出未捕获的类型错误

无论我 select 是哪一天,都会抛出错误。由于 Ajax 请求没有正确触发,bean 方法根本没有触发,所以我认为它必须是在视图端需要正确修复的东西。

我已经尝试禁用所有自定义 css 和 js 导入(出于设计目的,我使用 Bootstrap 4.2.1 css 和 js)并手动清理部署目录。我还通过清除浏览器历史记录和缓存确保我的项目加载时没有旧资源。到目前为止,我没有运气解决这些问题(所有警告和错误都保持不变)。

我不知道这三个问题是否相关,但我已将它们放在同一个 post 中。有时解决一个问题,也会解决其他问题。因为它们都发生在同一个构图中,所以这可能又是这种情况。

如果我能以任何方式提供更多详细信息,请告诉我,我会尽我所能。

谢谢。

编辑:基于@Melloware 收到的评论。将 Primefaces 6.2 升级到 Primefaces 7-RC2 为我解决了一些问题。弃用警告和未捕获的类型错误现已消失。第一个问题仍然存在。计划组件不显示计划对象或 "events"。在调试模式下,我发现调度对象已创建并被推送到调度模型。我现在需要的是显示它们的视图组件。

由于我能够解决我的最后一个难题,日程表不显示我的日程表对象,我将写下我的问题的完整答案。

@Melloware 提供的答案帮助我推进了我的核心设计。将 Primefaces 6.2 升级到 Primefaces 7-RC2 移除了弃用警告和未捕获的类型错误。现在我能够为我的最后一个问题找到并实施解决方案,加载计划对象。

我在通过我的内容加载器 bean 加载我的内容时犯了一个新手错误。准确地说,我已经实现了内容导航,同时将链接推送到我的内容加载器 bean,它处理执行导航操作时接下来应该加载的内容。应使用 CommandLink 组件的 Action 属性调用导航操作。这是我犯设计错误的地方。我改用了 ActionListener 属性,这导致我的内容无法正确加载。

这是来自@BalusC post 的一句话,让我的车轮再次旋转:

The action method can (thus, not must) return a String which will be used as navigation case outcome (the target view). A return value of null or void will let it return to the same page and keep the current view scope alive. A return value of an empty string or the same view ID will also return to the same page, but recreate the view scope and thus destroy any currently active view scoped beans and, if applicable, recreate them.

完整 post 可在此处找到:differences-between-action-and-actionlistener

我今天学到了一些新东西。

谢谢!