版本:NetBeans:7.2.1 PrimeFaces:3.5.3 GlassFish:3.1.2 JDK 1.6
我一直在努力寻找相关问题,并找到了接近的主题,但不是我想要的。我正在尝试执行类似于 PrimeFaces ShowCase 中的p:schedule 演示的操作,我希望在其中显示一个对话框,显示单击事件的详细信息。
我认为问题出在从支持 bean 调用侦听器方法。当我在 p:ajax 标记中输入侦听器方法时,NetBeans 会强制我传入如下参数:
listener="#{cmodel.onEventSelect(e)}"
我认为没有必要,因为无论如何我都没有传递的价值。
我也在想:
- NetBeans 出现了一些问题,无法将该方法识别为侦听器。(因为我不断看到人们调用该方法而无需传递参数的多个示例。)
或者
- 我没有在模型中正确地将该方法注册为侦听器。
此外,我直接将 ShowCase 中的演示复制并粘贴到一个项目中,但它不起作用,这让我更倾向于 NetBeans 的问题。(即,对话框出现但没有关于所选事件的信息)
所以总结一下;事件正在按计划本身显示,我只是无法让对话框显示所选事件的事件详细信息。
任何帮助将不胜感激!
视图层:
<h:form>
<p:schedule id="nelsonsSchedule" value="#{cmodel.scheduleModel}" showHeader="true"
leftHeaderTemplate="none" rightHeaderTemplate="prev, next today"
draggable="false" timeZone="UTC" styleClass="schedule">
<p:ajax event="eventSelect" listener="#{cmodel.onEventSelect}"
update="eventDialog eventDetails" oncomplete="eventDialog.show()"/>
</p:schedule>
<p:dialog id="eventDialog" widgetVar="eventDialog" header="EventDetails">
<p:panel id="eventDetails">
<h:outputLabel value="#{cmodel.selectedEvent.title}" />
</p:panel>
</p:dialog>
</h:form>
支持豆:
@ManagedBean(name = "cmodel")
@SessionScoped 公共类 CalendarModel 实现 Serializable {
private ScheduleModel scheduleModel;
private List<ScheduleEvent> allScheduledGames;
private DefaultScheduleEvent gameEvent;
public ScheduleEvent selectedEvent;
List<Game> allGames;
@PersistenceContext
private EntityManager em;
public CalendarModel() {
}
@PostConstruct
public void init() {
allScheduledGames = new ArrayList<ScheduleEvent>();
allGames = new ArrayList<Game>();
allGames = em.createNamedQuery("Game.findAll").getResultList();
/*create list of games to put into the ScheduleModel*/
for (int i = 0; i < allGames.size(); i++) {
gameEvent = new DefaultScheduleEvent(allGames.get(i).getOpponent() +
"\n\n\n" + allGames.get(i).getTimeOfGame(),
allGames.get(i).getDateOfGame(),
allGames.get(i).getDateOfGame());
if(allGames.get(i).getHomeAway().equals("away")){
gameEvent.setStyleClass("away");
} else{
gameEvent.setStyleClass("home");
}
gameEvent.setData(allGames.get(i));
allScheduledGames.add(gameEvent);
}/*end for*/
scheduleModel = new DefaultScheduleModel(allScheduledGames);
}/*end init()*/
public void onEventSelect (SelectEvent e) {
selectedEvent = new DefaultScheduleEvent();
selectedEvent = (ScheduleEvent) e.getObject();
}