PrimeFacesは、リッチな画面を構築するのに、とても便利ですね。 私自身は、JavaScriptやjQueryなど、クライアントサイドが得意ではないので、とても助かっています。
今回は、お試しで、職場の休日が赤になるようなカレンダーを作ってみました。
サンプル・ソース
calendar.xhtml
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:p="http://primefaces.org/ui"> <h:head> <h:outputScript library="js" name="pfCalendars.js"/> <style type="text/css"> .highlight-calendar a { color: red !important; } </style> </h:head> <h:body> <h:form id="form"> <p:growl id="msgs" showDetail="true" /> <p:outputLabel for="button" value="Calendar: " /> <p:calendar id="button" locale="ja" showOn="button" pattern="yyyy/MM/dd" beforeShowDay="setHolidays" value="#{calendarView.date1}" /> </h:form> </h:body> </html>
pfCalendars.js
/** * For p:calendar Component * */ var holidays; function setHolidays(date) { var d = date.getDate(); var m = date.getMonth() + 1; var y = date.getFullYear(); var cssClass = 'highlight-calendar'; if (holidays[y] && holidays[y][m] && holidays[y][m][d]) { return [true, cssClass, '']; } else { return [true, '']; // no change } } jQuery(function ($) { $.getJSON("resources/json/holidays.json", function (data) { holidays = data; }); }); PrimeFaces.locales['ja'] = { closeText: '閉じる', prevText: '前', nextText: '次', monthNames: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], monthNamesShort: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], dayNames: ['日曜', '月曜', '火曜', '水曜', '木曜', '金曜', '土曜'], dayNamesShort: ['日', '月', '火', '水', '木', '金', '土'], dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'], weekHeader: '週', firstDay: 0, isRTL: false, showMonthAfterYear: false, yearSuffix: '', timeOnlyTitle: '時間のみ', timeText: '時間', hourText: '時', minuteText: '分', secondText: '秒', currentText: '今日', ampm: false, month: '月', week: '週', day: '日', allDayText: '全日' };
holidays.json
{ "2015": { "1": { "1": true, "2": true, "3": true, "4": true, "10": true, "11": true, "12": true, "17": true, "18": true, "24": true, "25": true, "31": true }, "2": { "1": true, "7": true, "8": true, "11": true, "14": true, "15": true, "21": true, "22": true, "28": true } } }
結果
ブラウザでカレンダーコンポーネントを表示されてみると、下記の画面のようになりました!
json側の設定で、日付ごとに休日や行事などをbooleanではなく、値で管理させれば、よりカラフルなカレンダーになるかと思います。
課題
原因が明確になっていないのですが、Firefoxでは、「整形式になっていません。」という警告が!!
jsonも問題なさそうだし。
問題なく動くので、とりあえずこのままで動かしていますが・・・。う~ん、何とも。。。