【问题标题】:PrimeFaces p:dialog with SchedulePrimeFaces p:带有日程安排的对话框
【发布时间】:2014-01-21 09:29:15
【问题描述】:

我已经用 primefaces.org 为 Schedule 组件编写了相同的代码。当我点击一天时,我可以看到日程,但看不到 p:dialog 组件。这里是代码。

<p:growl id="messages" showDetail="true" />

<p:schedule id="schedule" value="#{scheduleController.eventModel}" widgetVar="myschedule">

    <p:ajax event="dateSelect" listener="#{scheduleController.onDateSelect}" update="eventDetails" oncomplete="PF('eventDialog').show()" />
    <p:ajax event="eventSelect" listener="#{scheduleController.onEventSelect}" update="eventDetails" oncomplete="PF('eventDialog').show()" />
    <p:ajax event="eventMove" listener="#{scheduleController.onEventMove}" update="messages" />
    <p:ajax event="eventResize" listener="#{scheduleController.onEventResize}" update="messages" />

</p:schedule>

<p:dialog appendToBody="true" widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">
    <h:panelGrid id="eventDetails" columns="2">
        <h:outputLabel for="title" value="Title:" />
        <p:inputText id="title" value="#{scheduleController.event.title}" required="true"/>

        <h:outputLabel for="from" value="From:" />
        <p:inputMask id="from" value="#{scheduleController.event.startDate}" mask="99/99/9999">
            <f:convertDateTime pattern="dd/MM/yyyy" />
        </p:inputMask>

        <h:outputLabel for="to" value="To:" />
        <p:inputMask id="to" value="#{scheduleController.event.endDate}" mask="99/99/9999">
            <f:convertDateTime pattern="dd/MM/yyyy" />
        </p:inputMask>

        <h:outputLabel for="allDay" value="All Day:" />
        <h:selectBooleanCheckbox id="allDay" value="#{scheduleController.event.allDay}" />

        <p:commandButton type="reset" value="Reset" />
        <p:commandButton id="addButton" value="Save" actionListener="#{scheduleController.addEvent}" oncomplete="PF('myschedule').update();PF('eventDialog').hide();"/>
    </h:panelGrid>
</p:dialog>

这里是 ScheduleController 类。

public class ScheduleController {
private ScheduleModel eventModel;

private ScheduleEvent event = new DefaultScheduleEvent();

public ScheduleController() {
    eventModel = new DefaultScheduleModel();
    eventModel.addEvent(new DefaultScheduleEvent("Champions League Match", previousDay8Pm(), previousDay11Pm()));
    eventModel.addEvent(new DefaultScheduleEvent("Birthday Party", today1Pm(), today6Pm()));
    eventModel.addEvent(new DefaultScheduleEvent("Breakfast at Tiffanys", nextDay9Am(), nextDay11Am()));
    eventModel.addEvent(new DefaultScheduleEvent("Plant the new garden stuff", theDayAfter3Pm(), fourDaysLater3pm()));
}

public Date getRandomDate(Date base) {
    Calendar date = Calendar.getInstance();
    date.setTime(base);
    date.add(Calendar.DATE, ((int) (Math.random()*30)) + 1);    //set random day of month

    return date.getTime();
}

public Date getInitialDate() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(calendar.get(Calendar.YEAR), Calendar.FEBRUARY, calendar.get(Calendar.DATE), 0, 0, 0);

    return calendar.getTime();
}

public ScheduleModel getEventModel() {
    return eventModel;
}

private Calendar today() {
    Calendar calendar = Calendar.getInstance();
    calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), 0, 0, 0);

    return calendar;
}

private Date previousDay8Pm() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.DATE, t.get(Calendar.DATE) - 1);
    t.set(Calendar.HOUR, 8);

    return t.getTime();
}

private Date previousDay11Pm() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.DATE, t.get(Calendar.DATE) - 1);
    t.set(Calendar.HOUR, 11);

    return t.getTime();
}

private Date today1Pm() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.HOUR, 1);

    return t.getTime();
}

private Date theDayAfter3Pm() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.DATE, t.get(Calendar.DATE) + 2);     
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.HOUR, 3);

    return t.getTime();
}

private Date today6Pm() {
    Calendar t = (Calendar) today().clone(); 
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.HOUR, 6);

    return t.getTime();
}

private Date nextDay9Am() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.AM_PM, Calendar.AM);
    t.set(Calendar.DATE, t.get(Calendar.DATE) + 1);
    t.set(Calendar.HOUR, 9);

    return t.getTime();
}

private Date nextDay11Am() {
    Calendar t = (Calendar) today().clone();
    t.set(Calendar.AM_PM, Calendar.AM);
    t.set(Calendar.DATE, t.get(Calendar.DATE) + 1);
    t.set(Calendar.HOUR, 11);

    return t.getTime();
}

private Date fourDaysLater3pm() {
    Calendar t = (Calendar) today().clone(); 
    t.set(Calendar.AM_PM, Calendar.PM);
    t.set(Calendar.DATE, t.get(Calendar.DATE) + 4);
    t.set(Calendar.HOUR, 3);

    return t.getTime();
}

public ScheduleEvent getEvent() {
    return event;
}

public void setEvent(ScheduleEvent event) {
    this.event = event;
}

public void addEvent(ActionEvent actionEvent) {
    if(event.getId() == null)
        eventModel.addEvent(event);
    else
        eventModel.updateEvent(event);

    event = new DefaultScheduleEvent();
}

public void onEventSelect(SelectEvent selectEvent) {
    event = (ScheduleEvent) selectEvent.getObject();
}

public void onDateSelect(SelectEvent selectEvent) {
    event = new DefaultScheduleEvent("", (Date) selectEvent.getObject(), (Date) selectEvent.getObject());
}

public void onEventMove(ScheduleEntryMoveEvent event) {
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event moved", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

    addMessage(message);
}

public void onEventResize(ScheduleEntryResizeEvent event) {
    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, "Event resized", "Day delta:" + event.getDayDelta() + ", Minute delta:" + event.getMinuteDelta());

    addMessage(message);
}

private void addMessage(FacesMessage message) {
    FacesContext.getCurrentInstance().addMessage(null, message);
}

那么为什么在运行此代码时我看不到 p:dialog?代码与 primefaces.org 示例相同。它在网站上运行良好。

【问题讨论】:

    标签: java jsf-2 primefaces


    【解决方案1】:

    我刚刚复制并粘贴了您的代码并对其进行了一些更改,它运行良好。我使用的是 Primefaces 版本 4。

    以下是我对视图文件所做的更改:

    <p:growl id="messages" showDetail="true" autoUpdate="true" />
    
    <h:form>
        <p:schedule id="schedule" value="#{scheduleController.eventModel}" widgetVar="myschedule">
            <p:ajax event="dateSelect" listener="#{scheduleController.onDateSelect}" update="@(.eventDetails)" oncomplete="PF('eventDialog').show()" />
            <p:ajax event="eventSelect" listener="#{scheduleController.onEventSelect}" update="@(.eventDetails)" oncomplete="PF('eventDialog').show()" />
            <p:ajax event="eventMove" listener="#{scheduleController.onEventMove}"  />
            <p:ajax event="eventResize" listener="#{scheduleController.onEventResize}"  />
        </p:schedule>
    </h:form>
    
    <p:dialog appendToBody="true" widgetVar="eventDialog" header="Event Details" showEffect="clip" hideEffect="clip">
        <h:form id="dlgForm">
            <h:panelGrid id="eventDetails" columns="2" styleClass="eventDetails">
                <h:outputLabel for="title" value="Title:" />
                <p:inputText id="title" value="#{scheduleController.event.title}" required="true"/>
    
                <h:outputLabel for="from" value="From:" />
                <p:inputMask id="from" value="#{scheduleController.event.startDate}" mask="99/99/9999">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </p:inputMask>
    
                <h:outputLabel for="to" value="To:" />
                <p:inputMask id="to" value="#{scheduleController.event.endDate}" mask="99/99/9999">
                    <f:convertDateTime pattern="dd/MM/yyyy" />
                </p:inputMask>
    
                <h:outputLabel for="allDay" value="All Day:" />
                <h:selectBooleanCheckbox id="allDay" value="#{scheduleController.event.allDay}" />
    
                <p:commandButton type="reset" value="Reset" />
                <p:commandButton id="addButton" value="Save" actionListener="#{scheduleController.addEvent}" oncomplete="PF('myschedule').update();PF('eventDialog').hide();"/>
            </h:panelGrid>
        </h:form>
    </p:dialog>
    

    【讨论】:

    • 它不工作。我无法找到从“j_idt13:j_idt14:schedule”引用的标识符为“dlgForm:eventDetails”的组件。错误。
    • 您使用的是什么版本的 Primefaces?您是否尝试过以其他方式引用 eventDetails?
    • 它会在 4.0 上工作。我得到无法找到从“form:j_idt12:schedule”引用的表达式“:dlgForm:eventDetails”的组件。错误
    • 答案是使用更宽容的更新机制编辑的。看看有没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多