回答
PrimeFaces沒有月份選取器組件。所以,如果你想使用基於jQuery的外部組件,然後結賬jQuery.mtz.monthpicker
鏈接已損壞。請確認更正的一個是否正確。 – gersonZaragocin 2016-11-10 21:56:01
您可以設置此的模式,在你的情況將是:
<p:calendar id="test" value="#{bean.date}" pattern="MM.yyyy" />
但是隻顯示數字,如何在標籤中顯示年份和月份? – 2013-08-29 20:07:45
@CristianChaparroA。我沒有嘗試過,但日曆,但內臟,你可以嘗試'pattern =「MMMMMMMM yyyy」' – leostiw 2013-08-30 08:23:53
謝謝!,但是當我嘗試更改de date不起作用時,我不能選擇其他日期,因爲不顯示日曆。 – 2013-09-22 22:04:37
我讀,你不能從包裝盒中實現這一功能了來自Primefaces。
https://code.google.com/p/primefaces/issues/detail?id=3453
的問題是舊的,但由一個月的最新評論前。於是,他們用這種方式:
jQuery UI DatePicker to show month year only
也有隻使用<p:selectOneMenu>
和畫報,你需要在它外面什麼解決方案。
乾杯
謝謝AndresL.I會嘗試 – Sagar 2013-03-25 09:02:26
我只是用CSS隱藏了日期選擇器的表格。我還必須創建自己的箭頭進行導航,因爲標準箭頭不會觸發dateSelect
事件。
標記:
<p:commandButton actionListener="#{bean.decrementMonth}"
id="navLeft" update="[your components]" icon="ui-icon-triangle-1-w" />
<h:panelGroup class="tableView">
<p:calendar value="#{bean.selectedDate}" mode="inline" />
</h:panelGroup>
<p:commandButton actionListener="#{bean.incrementMonth}"
id="navRight" update="[your components]" icon="ui-icon-triangle-1-e" />
CSS:
.tableView table,
.tableView a.ui-datepicker-prev,
.tableView a.ui-datepicker-next {
display: none;
}
bean的方法:
public void decrementMonth() throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(this.selectedDate);
c.add(Calendar.MONTH, -1);
//... business logic to update date dependent data
}
public void incrementMonth() throws Exception {
Calendar c = Calendar.getInstance();
c.setTime(this.selectedDate);
c.add(Calendar.MONTH, 1);
//... business logic to update date dependent data
}
結果(PrimeFaces 3.4.2):
這是我如何實現一個簡單的一個月的範圍選擇看起來是這樣的:
的VoirCalendrier.xhtml網頁:
<h:form id="calendrierRegenererFormulaire">
<h2><h:outputText value="#{msgs.CalendrierPlageAafficher} "/></h2>
<h:panelGrid columns="6">
<h:outputLabel value="#{msgs.CalendrierDateDebut} : " for="calendrierDateDebut" />
<p:calendar id="calendrierDateDebut" value="#{locationsControleur.dateDebut}"
pattern="yyyy-MM-dd" effect="slideDown" navigator="true" mode="inline"
lang="#{sessionControleur.localeInterface}" locale="#{sessionControleur.langue}" style="moisAnSeul" />
<h:outputLabel value="#{msgs.CalendrierDateFin} : " for="calendrierDateFin" />
<p:calendar id="calendrierDateFin" value="#{locationsControleur.dateFin}"
pattern="yyyy-MM-dd" effect="slideDown" navigator="true" mode="inline"
lang="#{sessionControleur.localeInterface}" locale="#{sessionControleur.langue}" style="moisAnSeul" />
<p:commandButton value="#{msgs.CalendrierRegenerer}" update=":calendrierFormulaire"
onclick="regenererCal()"/>
</h:panelGrid>
</h:form>
要防止顯示日曆日,您只需要設置其dislay屬性沒有用下面的代碼在您的活動css文件:
.ui-datepicker-calendar {
display: none;
}
正如丹尼爾Slazlay上面提到的,與月/年的下拉菜單或箭頭圖標導航不改變內部日期值的p:日曆控件。爲了達到這個目的,當「重新生成日曆」按鈕被觸發時,爲兩個p:日曆讀取所選月份和年份的下拉值。通過這些信息,您可以構建格式爲「yyyy-MM-dd」的日期字符串並設置p:日曆控件的內部隱藏值。對於月份範圍的開始月份,本月的第一天返回,而在結束的月份,它是返回的月份的最後一天。這與跟隨着的JavaScript來完成:
function regenererCal() {
year = $("#calendrierRegenererFormulaire\\:calendrierDateDebut .ui-datepicker-year").val();
month = $("#calendrierRegenererFormulaire\\:calendrierDateDebut .ui-datepicker-month").val();
$('#calendrierRegenererFormulaire\\:calendrierDateDebut_input').val(year + '-' + ('0' + (++month)).slice(-2) + '-01');
year = $("#calendrierRegenererFormulaire\\:calendrierDateFin .ui-datepicker-year").val();
month = $("#calendrierRegenererFormulaire\\:calendrierDateFin .ui-datepicker-month").val();
lastDay = new Date(year, month + 1, 0); // To get last day of month, see http://stackoverflow.com/a/13572682/1431979
$('#calendrierRegenererFormulaire\\:calendrierDateFin_input').val(lastDay.getFullYear() + '-' + ('0' + (lastDay.getMonth()+1)).slice(-2) + '-' + lastDay.getDate());
// Check what is posted to your server
console.log("[voirCalendrier.js]regenererCal calendrierDateDebut_input = " + $('#calendrierRegenererFormulaire\\:calendrierDateDebut_input').val());
console.log("[voirCalendrier.js]regenererCal calendrierDateFin_input = " + $('#calendrierRegenererFormulaire\\:calendrierDateFin_input').val());
}
在服務器端,您可以檢查正確的信息由setter方法獲得:
...
formatAAAA_MM_JJ = new SimpleDateFormat("yyyy-MM-dd HH:mm", langue);
...
public void setDateDebut(Date dateDebut) {
this.dateDebut = dateDebut;
logger.info("{locationsContrôleur}setDateDebut dateDebut = " + formatAAAA_MM_JJ.format(dateDebut));
}
public void setDateFin(Date dateFin) {
this.dateFin = dateFin;
logger.info("{locationsContrôleur}setDateFin dateFin = " + formatAAAA_MM_JJ.format(dateFin));
}
我希望這可以幫助別人。
//<![CDATA[
function showMonthYear(calendar){
$('.ui-datepicker-calendar').css('display','none');
$('.ui-datepicker').css('top', $('.ui-datepicker').offset().top+250);
var month = '';
var year = '';
if($(calendar).val()){
month = $(calendar).val().split('/')[0];
year = $(calendar).val().split('/')[1];
} else {
month = $.datepicker.formatDate("mm", new Date());
year = $.datepicker.formatDate("yy", new Date());
}
var exists = 0 != $('.ui-datepicker-year option[value='+year+']').length;
if(!exists){
$(".ui-datepicker-year").empty();
var initYear = parseInt(year)-10;
var endYear = parseInt(year)+10;
while(initYear < endYear){
$(".ui-datepicker-year").append($('<option>', {value:initYear, text: initYear}));
initYear++;
}
}
$('.ui-datepicker-month').val(parseInt(month)-1);
$('.ui-datepicker-year').val(year);
$(".ui-datepicker-month").change(function(){changeMonthYear(calendar);});
$(".ui-datepicker-year").change(function(){changeMonthYear(calendar);});
}
function changeMonthYear(calendar){
console.log('changeMonthYear');
$('.ui-datepicker-calendar').css('display','none');
$(".ui-datepicker-month").change(function(){changeMonthYear(calendar);});
$(".ui-datepicker-year").change(function(){changeMonthYear(calendar);});
var month = parseInt($('.ui-datepicker-month').val())+1;
if(month < 10){ month = '0'+month; }
$(calendar).val(month+"/"+parseInt($('.ui-datepicker-year').val()));
}
// ]]>
</script>
<p:calendar size="5"
onclick="showMonthYear(this)"
maxlength="10" pattern="MM/yyyy" navigator="true" />
你可以添加一些上下文嗎?也許解釋代碼? – 2015-12-01 14:33:09
你必須添加此塊來完成導航箭頭:
$(".ui-datepicker-next").click(function(){changeMonthYear(calendar);});
$(".ui-datepicker-prev").click(function(){changeMonthYear(calendar);});
你可以在p使用viewChange事件:日曆捕捉下一個/上月的點擊。然後,您可以通過單擊該月的第一天來觸發dateSelect事件。
JSF:
<p:calendar value="#{sampleBean.month}" styleClass="monthcal" mode="inline">
<p:ajax event="viewChange" onsuccess="$('.ui-calendar[id=\''+this.source+'\'] a.ui-state-default').filter(function(){return $(this).text()*1===1;}).click();" />
</p:calendar>
爲了隱藏與天窗玻璃,添加以下的CSS
.monthcal .ui-datepicker-calendar {display: none;}
從Primefaces文檔使用了該功能:
另一個方便的事件是viewChange在月份被觸發並且 年的變化。將org.primefaces.event.DateViewChangeEvent 的實例傳遞給提供當前月份和年份 信息的事件偵聽器。
作了如下代碼: XHTML
<p:panelGrid styleClass="monthYearOnly">
<p:row>
<p:column>FROM:</p:column>
<p:column>
<p:calendar id="from" mode="inline" value="#{callEntryBean.from}" navigator="true">
<p:ajax event="viewChange" listener="#{callEntryBean.updateFrom()}"/>
</p:calendar>
</p:column>
<p:column>TO:</p:column>
<p:column>
<p:calendar id="to" mode="inline" value="#{callEntryBean.to}" navigator="true">
<p:ajax event="viewChange" listener="#{callEntryBean.updateTo()}"/>
</p:calendar>
</p:column>
<p:column>
<p:commandButton value="Filter"
action="#{callEntryBean.filterDisplay}" update=""/>
</p:column>
</p:row>
</p:panelGrid>
CSS
.monthYearOnly .ui-datepicker-calendar{
display: none;
}
豆
public void updateFrom(){
Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
LOGGER.info("before: " + from);
Calendar c = Calendar.getInstance();
c.setTime(from);
c.set(Calendar.MONTH, Integer.parseInt(requestParams.get("form:from_month")) - 1);
c.set(Calendar.YEAR, Integer.parseInt(requestParams.get("form:from_year")));
from = c.getTime();
LOGGER.info("after: " + from);
}
public void updateTo(){
Map<String,String> requestParams = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
LOGGER.info("before: " + to);
Calendar c = Calendar.getInstance();
c.setTime(to);
c.set(Calendar.MONTH, Integer.parseInt(requestParams.get("form:to_month")) - 1);
c.set(Calendar.YEAR, Integer.parseInt(requestParams.get("form:to_year")));
c.set(Calendar.DATE,c.getActualMaximum(Calendar.DAY_OF_MONTH));
to = c.getTime();
Calendar now = Calendar.getInstance();
if(c.after(now)){
to = now.getTime();
}
LOGGER.info("after: " + to);
}
基本上,當month
或year
被更改時,ajax觸發器是此處的主要功能。不幸的是,這是一個工作,因爲我無法檢索org.primefaces.event.DateViewChangeEvent
。這似乎是一個錯誤,我剛剛在Primefaces論壇上發佈了一個報告。當我在那裏得到一些反饋時,會更新這篇文章。
希望它有幫助。
- 1. RichFaces日曆:僅顯示月份和年份
- 2. 顯示月份和年份
- 3. 月份和年份查看日曆
- 4. Django DateField的日曆只顯示月份和年份?
- 5. 如何獲取日曆上顯示的月份和年份
- 6. Plone 4:CalendarWidget僅顯示年份,無日期和月份
- 7. 顯示年份日曆
- 8. 如何僅在daterangepicker插件中顯示月份和年份?
- 9. 根據月份顯示日曆日曆
- 10. Django SelectDateWidget只顯示月份和年份
- 11. android:如何在android中的日曆日期中顯示月份和年份?
- 12. 顯示日期,月份和年份代替當前的日期,月份和年份
- 13. 在JQuery日曆中顯示日期以及其他月份和月份和年份菜單
- 14. 使日曆顯示VHDL的月份和月份?
- 15. Excel - 僅顯示特定月份和年份的列
- 16. Bootprap的Datepicker角度指令:僅顯示月份和年份
- 17. Excel公式僅顯示月份和年份?
- 18. 僅顯示月份和年份不適用於jQuery-2.1.1
- 19. 如何僅在Datatable的DataColumn中顯示月份和年份?
- 20. 如何在UIDatePicker中僅顯示月份和年份?
- 21. 在Ajax日曆擴展程序中僅顯示和選擇每年的月份
- 22. 帶月份和年份的不帶日期的日曆
- 23. 展開Adam Shaw的完整日曆以顯示年份和月份
- 24. 如何按年份和月份排序和顯示React數組?
- 25. Flex組件僅用於選擇月份和年份
- 26. 僅在Xamarin表單中顯示日期選取器中的月份和年份
- 27. 在SQL中顯示當前日期的年份和月份
- 28. 如何設置datepicker的日期只顯示月份和年份
- 29. 顯示DateTimePicker上的年份,月份和日期iOS
- 30. 如何使用UIPickerView顯示日期月份和年份(Upto 2015)?
您是否在談論只能獲取月份和年份的組件? – Jitesh 2013-03-25 07:24:04
是的確切Jitesh – Sagar 2013-03-25 07:28:11
你想擁有幾年,而不是幾天的月份列表?或者你在說什麼行爲? – 2013-03-25 07:33:48