如何正确使用p:schedule?

How to use p:schedule correctly?

我正在尝试使用 jsf 创建议程。我查看了 prime faces' website 但我没有明白它是如何工作的,即使我复制了网站上提供的代码也是如此。我也在这里和 google 上进行了一些研究,但我发现没有任何效果。

所以我尝试做一个最简单的例子:

在我的 .xhtml 中:

<p:schedule value="#{agendaControl.planning}">
        
</p:schedule>

在我的 .java 文件中:

@Named
@ViewScoped
@Stateful(passivationCapable=true)
public class AgendaControl {
    private ScheduleModel planning;

    @PostConstruct
    public void init() {
        System.out.println("test");
        planning = new DefaultScheduleModel();
    
        DefaultScheduleEvent<?> event = DefaultScheduleEvent.builder()
            .title("test")
            .startDate(LocalDateTime.now())
            .build();
    
        planning.addEvent(event);
    }

    public ScheduleModel getPlanning() {
        return planning;
    }

    public void setPlanning(ScheduleModel planning) {
        this.planning = planning;
    }
}

我想知道我做错了什么以及我应该如何使用 p:schedule 使其正常工作?

提前感谢您的帮助和任何提示。我的代码中可能有一些初学者错误,因为我以前从未使用过 jsf。

编辑:

我查看了 this Whosebug question,看看我的 @PostConstruct 注释方法是否有效,是的。我的计划变量中有我的“测试”事件。

经过更多的研究,我发现了如何让它按我想要的方式工作。这是使您的议程有效的示例极简主义代码。

注意:问题中引用的 link 是关于 PrimeFaces 11 的。Here is the link for PrimeFaces 8,此处使用的版本。文档比v11更清晰一些,别忘了查看其他信息!

agenda.xhtml :

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:p="http://primefaces.org/ui"
  xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>Agenda</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<body>
    <p:growl id="messages" showDetail="true"/>
    
    <p:schedule id="schedule" value="#{agendaControl.eventModel}"></p:schedule>
</body>

AgendaControl.java :

@Named
@ViewScoped // import javax.faces.view.ViewScoped;
public class AgendaControl implements Serializable {
    private ScheduleModel eventModel;

    @PostConstruct
    public void init() {
        eventModel = new DefaultScheduleModel();

        DefaultScheduleEvent<?> event = DefaultScheduleEvent.builder()
            .title("Champions League Match")
            // as I tested, you NEED a start date and enddate
            .startDate(LocalDateTime.now())
            .endDate(LocalDateTime.of(2022, 1, 18, 12, 0)) // change with tomorrow's date
            .build();
        eventModel.addEvent(event);
    }

    public ScheduleModel getEventModel() {
        return eventModel;
    }
}

不要忘记:你需要在你的 pom.xml(在我的例子中是 Maven 项目)中添加这个依赖项:

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>8.0</version>
</dependency>

如果您忘记了,您将无法在您的 .java 文件中导入所需的 类。

希望对您有所帮助。