1

版本: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)}"

我认为没有必要,因为无论如何我都没有传递的价值。

我也在想:

  1. NetBeans 出现了一些问题,无法将该方法识别为侦听器。(因为我不断看到人们调用该方法而无需传递参数的多个示例。)

或者

  1. 我没有在模型中正确地将该方法注册为侦听器。

此外,我直接将 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();       
}  
4

1 回答 1

0

万一有人遇到同样的问题——那就是 NetBeans。我升级到 7.3 就没有问题了。尽管出现了另一种情况,即 itellisense 无法识别来自支持 bean 的哈希图,但这是另一个问题。

于 2013-06-10T16:46:35.353 回答