我正在使用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/
第三期:您可能已经注意到我在内容表单中也有一个对话框。此对话框在日期选择事件上触发,当我尝试从datepicker组件中选择一个日期时,它将引发一个有趣的Javascript错误(未捕获的类型错误),如下所示:
这很有趣,因为如果我尝试在Firefox上执行相同的操作,则会引发不同的错误,如下所示:
Microsoft Edge根本不会引发错误。
注意: Datepicker也可能是一个问题,因为计划加载并显示带有随机生成数据的模型时,它不会弹出。如果调度程序无法加载模型,则选择任何日期时,日期选择器都会弹出并引发未捕获的类型错误。
我选择哪个日期都没关系,会引发错误。由于Ajax请求无法正确触发,因此bean方法根本不会触发,因此我认为它必须是在视图方面需要正确修复的东西。
我尝试并禁用了所有自定义的css和js导入(出于设计目的,我使用Bootstrap 4.2.1 css和js进行了导入),并手动清理了部署目录。我还通过清除浏览器历史记录和缓存来确保加载的项目没有旧资源。到目前为止,我没有解决这些问题的运气(所有警告和错误均保持不变)。
我不知道这三个问题是否相关,但我已将它们放在同一篇文章中。有时解决一个问题,也解决其他问题。由于它们全部以相同的成分发生,因此可能会再次出现。
让我知道是否可以通过任何方式提供更多细节,我会尽力而为。
谢谢。
编辑:基于从@Melloware收到的评论。将Primefaces 6.2升级到Primefaces 7-RC2为我解决了一些问题。弃用警告和未捕获的类型错误现已消失。第一个问题仍然存在。计划组件不显示计划对象或“事件”。在调试模式下,我发现计划对象已创建并被推送到计划模型。我现在需要的是显示它们的视图组件。
答案 0 :(得分:2)
由于我能够解决难题的最后一部分,计划不显示我的计划对象,所以我将为我的问题写一个完整的答案。
@Melloware提供的答案帮助我推进了核心设计。将Primefaces 6.2升级到Primefaces 7-RC2可消除过时警告和未捕获的类型错误。现在,我可以找到并实现针对我的最后一个问题的解决方案,即加载计划对象。
我在通过内容加载器bean加载内容时遇到了菜鸟错误。确切地说,我实现了内容导航,同时将链接推送到我的内容加载器Bean,后者处理在执行导航操作时接下来应加载的内容。应使用CommandLink组件中的“动作”属性来调用导航动作。这是我犯错设计的地方。我改用了ActionListener属性,这导致我的内容无法正确加载的情况。
这是@BalusC帖子中的一句话,使我的车轮再次旋转:
该操作方法可以(因此不是必须)返回一个String,该字符串将是 用作导航案例结果(目标视图)。返回值为 null或void将使其返回同一页面并保留当前页面 查看活动范围。空字符串或相同视图的返回值 ID也将返回到同一页面,但是将重新创建视图范围和 因此销毁所有当前活动的视图作用域bean,如果 适用,请重新创建它们。
完整的帖子可以在这里找到:differences-between-action-and-actionlistener
我今天学到了一些新东西。
谢谢!