バージョン: 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>
バッキング Bean:
@ManagedBean(name = "cmodel")
@SessionScoped public class 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();
}