reserveDetails.jspの「予約する」ボタンがクリックされたときのイベントの処理を追加します。イベント処理は、以下の手順で作成します。
JSPエディタの「予約する」ボタンの上でマウスを右クリックします。コンテキストメニューから、[イベント] > [ページ遷移の設定] > [check_action] を選択してください。以下のReserveDetails.javaが生成され、その中に、ボタンがクリックされたときのイベントで呼び出されるメソッドcheck_actionのひな型が生成されます。
ポイント
コンテキストメニューの[イベント] > [ページ遷移の設定] > [check_action]が選択不可状態になっている場合、イベントを追加するボタンを選択状態にして、UIマネージャビューの左ペインのツリーから[イベント] > [ページ遷移の設定]を選択し、右ペインで[なし]をチェックしてください。
「予約する」ボタンがクリックされた場合に実行する処理を、check_actionメソッドに追加します。追加する部分を以下に赤色で示します。
ReserveDetails.java
... package myApp; ... import hotelReserve.ReserveBean;
import hotelReserve.ReserveCalendar;
import com.fujitsu.uji.compo.FieldString; /** * ReserveDetailsページに対する処理を記述するクラスです。 */ public class ReserveDetails { ... /** * UIコンポーネントのアクションが発生した際に次に遷移するページを指定するための文字列を返却します。 * @return 次のページを示す文字列 */ public String check_action() { // このアクションで次のページを指定する場合、faces-config.xmlファイルの // <from-outcome>要素の値を返却します // return "next"; FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
VariableResolver resolver = application.getVariableResolver();
ReserveBean bean =
(ReserveBean)resolver.resolveVariable(context, "reserveBean");
int start = bean.getArrivalDay().getSelectedIndex();
int end = bean.getDepartureDay().getSelectedIndex();
int type = bean.getRoomType().getSelectedIndex();
FieldString message = bean.getMessage();
if(start >= end){
message.setText(
"出発日よりも到着日の方が遅い、もしくは同じです。");
message.setVisible(true);
return "failed";
}
ReserveCalendar calendar = bean.getReserveCalendar();
int num = bean.getPeople().getValue().intValue();
if (calendar.checkNoVacancy(start,end,num,type) ){
message.setText("満員です。");
message.setVisible(true);
return "failed";
}
message.setVisible(false);
return "ok";
} ... }
次に、「予約状況へ戻る」ボタンがクリックされたときのイベントの処理を追加します。「予約する」ボタンと異なり、「予約状況へ戻る」ボタンがクリックされたときの遷移先の画面は固定的に決まっているため、ロジックの呼び出しが不要です。この場合は、UIマネージャビューで遷移先の画面を設定します。「予約状況へ戻る」ボタンを選択し、UIマネージャビューの左ペインのツリーから[イベント] > [ページ遷移の設定]を選択します。右ペインで[次のページを直接指定する]をチェックし、[次のページ]に「back」を選択します。
同様にして、“4 画面遷移の設計”で設計した情報に従って、reserveDetails.jsp以外の画面のイベントの処理も追加します。
reserveConfirm.jspの「OK」ボタン以外については、ロジックの呼び出しが不要であり、「予約状況へ戻る」ボタンと同様に遷移先の画面を設定します。reserveConfirm.jspの「OK」ボタンについては、ロジックの呼び出しが必要です。「予約する」ボタンと同様に作成し、生成されたreserve_actionメソッドのひな型に以下の赤字の部分を追加します。
reserveConfirm.java
... package myApp; ... import hotelReserve.ReserveBean;
import hotelReserve.ReserveCalendar; /** * ReserveConfirmページに対する処理を記述するクラスです。 */ public class ReserveConfirm { ... /** * UIコンポーネントのアクションが発生した際に次に遷移するページを指定するための文字列を返却します。 * @return 次のページを示す文字列 */ public String reserve_action() { // このアクションで次のページを指定する場合、faces-config.xmlファイルの // <from-outcome>要素の値を返却します // return "next"; FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
VariableResolver resolver = application.getVariableResolver();
ReserveBean bean =
(ReserveBean)resolver.resolveVariable(context, "reserveBean");
ReserveCalendar calendar = bean.getReserveCalendar();
int start = bean.getArrivalDay().getSelectedIndex();
int end = bean.getDepartureDay().getSelectedIndex();
int type = bean.getRoomType().getSelectedIndex();
int num = bean.getPeople().getValue().intValue();
calendar.reservation(start,end,num,type);
bean.init();
return "ok"; } ... }