Primefaces Schedule模型加载出错,

时间:2019-02-10 15:12:22

标签: primefaces jsf-2.2

我正在使用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或Javascript控制台中没有任何错误,只是随机的。惰性模型的工作原理相同。

第二个问题:空的或完整的时间表模型都没关系。页面加载时,我通常会收到一个Javascript警告:

  

jquery.js.xhtml?ln = primefaces&v = 6.2:4 [Deprecation]同步   由于主线程上的XMLHttpRequest不推荐使用   对最终用户体验的有害影响。如需更多帮助,请检查   https://xhr.spec.whatwg.org/

enter image description here

第三期:您可能已经注意到我在内容表单中也有一个对话框。此对话框在日期选择事件上触发,当我尝试从datepicker组件中选择一个日期时,它将引发一个有趣的Javascript错误(未捕获的类型错误),如下所示: enter image description here

这很有趣,因为如果我尝试在Firefox上执行相同的操作,则会引发不同的错误,如下所示: enter image description here

Microsoft Edge根本不会引发错误

注意: Datepicker也可能是一个问题,因为计划加载并显示带有随机生成数据的模型时,它不会弹出。如果调度程序无法加载模型,则选择任何日期时,日期选择器都会弹出并引发未捕获的类型错误。

我选择哪个日期都没关系,会引发错误。由于Ajax请求无法正确触发,因此bean方法根本不会触发,因此我认为它必须是在视图方面需要正确修复的东西。

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

我不知道这三个问题是否相关,但我已将它们放在同一篇文章中。有时解决一个问题,也解决其他问题。由于它们全部以相同的成分发生,因此可能会再次出现。

让我知道是否可以通过任何方式提供更多细节,我会尽力而为。

谢谢。

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

1 个答案:

答案 0 :(得分:2)

由于我能够解决难题的最后一部分,计划不显示我的计划对象,所以我将为我的问题写一个完整的答案。

@Melloware提供的答案帮助我推进了核心设计。将Primefaces 6.2升级到Primefaces 7-RC2可消除过时警告和未​​捕获的类型错误。现在,我可以找到并实现针对我的最后一个问题的解决方案,即加载计划对象。

我在通过内容加载器bean加载内容时遇到了菜鸟错误。确切地说,我实现了内容导航,同时将链接推送到我的内容加载器Bean,后者处理在执行导航操作时接下来应加载的内容。应使用CommandLink组件中的“动作”属性来调用导航动作。这是我犯错设计的地方。我改用了ActionListener属性,这导致我的内容无法正确加载的情况。

这是@BalusC帖子中的一句话,使我的车轮再次旋转:

  

该操作方法可以(因此不是必须)返回一个String,该字符串将是   用作导航案例结果(目标视图)。返回值为   null或void将使其返回同一页面并保留当前页面   查看活动范围。空字符串或相同视图的返回值   ID也将返回到同一页面,但是将重新创建视图范围和   因此销毁所有当前活动的视图作用域bean,如果   适用,请重新创建它们。

完整的帖子可以在这里找到:differences-between-action-and-actionlistener

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

谢谢!