2011-07-08 22 views
3

此問題主要針對PrimeFaces dev團隊,但也許其他人知道解決方法。我無法在PrimeFaces支持論壇上傳截圖,但我可以在這裏鏈接到我的問題。PrimeFaces 3.0 - 需要修復或解決<p:calendar>'添加6年'缺陷

報告爲PrimeFaces問題跟蹤器中的缺陷。添加明星投你的票了PrimeFaces開發團隊解決這個問題:link to defect in their issue tracker

在PrimeFaces支持論壇討論here

仍然存在於PrimeFaces 3.0-M3-SNAPSHOT

問題:

我使用PrimeFaces 3.0 <p:calendar>控制,以允許用戶查看和編輯同時包含Date對象日期和時間。 JavaScript控件似乎存在一些缺陷,導致它在+6年附近某個地方添加了一些奇怪的偏移量。

我已經設置了一些代碼來演示這個問題。

在第一個<p:calendar>我使用最初爲空的託管bean Date。控制是可以的。它將打開並將初始值設置爲當前日期,並將小時/分鐘/秒置零。我可以使用滑塊來正常設置小時,分鐘和秒鐘。

Associated with initially null managed bean property - displays ok

Associated with initially null managed bean property - opens ok

在第二<p:calendar>我使用託管bean Date最初被設定爲new Date()。這將創建一個新的Date對象設置爲當前服務器時間。控制是不是好吧。雖然<p:calendar>框中顯示的日期/時間最初看起來是正確的,但在將來打開JavaScript選擇器控件時,它將被修改爲一些奇怪的值。在關閉選擇器控件時,託管bean上的日期被設置爲奇怪的值。

Associated with initially populated managed bean property - displays ok

Associated with initially populated managed bean property - opens NOT ok

,可能會或可能不相關的另一個問題是,當我嘗試使用自定義format的日期:

ddHHmm'Z'MMMyy

此格式由我的客戶在其域中使用,我需要支持我不知何故。當我嘗試點擊框時,JavaScript選擇器甚至不會打開。有關該模式的東西(在Java SimpleDateFormat中工作得很好)將其分解。 PrimeFaces文檔對此進行了說明。

Associated with initially null value and has custom pattern - cannot open control!

問:有沒有人對這些問題<p:calendar>任何解決方法嗎?

UPDATE - 源代碼:

所述的複合元件,它包裝在<p:calendar>

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:p="http://primefaces.prime.com.tr/ui" 
     xmlns:composite="http://java.sun.com/jsf/composite"> 

    <composite:interface 
      displayName="calendar" 
      shortDescription="Wrapper for a PrimeFaces p:calendar"> 
     <composite:attribute 
      name="dateValue" 
      displayName="dateValue" 
      type="java.util.Date" 
      required="true" 
      shortDescription="EL expression that evaluates to a java.util.Date on a backing bean" /> 
     <composite:attribute 
      name="pattern" 
      displayName="pattern" 
      type="java.lang.String" 
      default="dd/MM/yyyy HH:mm:ss" 
      shortDescription="Pattern used to format the underlying Date value. See SimpleDatePattern class documentation for pattern syntax. NOTE: p:calendar does not appear to support some complex patterns." /> 
     <composite:attribute 
      name="ajaxRenderTargets" 
      displayName="ajaxRenderTargets" 
      type="java.lang.String" 
      default="@none" 
      shortDescription="Space-separated list of element ids that need to be rendered by Ajax when the calendar value changes. See f:ajax render attribute documentation." /> 
     <composite:attribute 
      name="tooltip" 
      displayName="tooltip" 
      type="java.lang.String" 
      default="" 
      shortDescription="String to be used as the tooltip for this component" /> 
     <composite:attribute 
      name="label" 
      displayName="label" 
      type="java.lang.String" 
      default="" 
      shortDescription="Label for this component. May be used in FacesMessages." /> 
     <composite:attribute 
      name="required" 
      displayName="required" 
      type="java.lang.Boolean" 
      default="false" /> 
    </composite:interface> 

    <composite:implementation> 
     <p:calendar 
       id="pCalendarInsideCC" 
       value="#{cc.attrs.dateValue}" 
       pattern="#{cc.attrs.pattern}" 
       readOnlyInputText="true" 
       showButtonPanel="false" 
       popupIconOnly="false" 
       showOn="focus" 
       mode="popup" 
       navigator="true" 
       pages="1" 
       showOtherMonths="true" 
       selectOtherMonths="false" 
       alt="#{cc.attrs.tooltip}" 
       title="#{cc.attrs.tooltip}" 
       required="#{cc.attrs.required}" 
       label="#{cc.attrs.label}"> 
      <p:ajax 
        event="valueChange" 
        update="#{cc.attrs.ajaxRenderTargets}" /> 
      <p:ajax 
        event="change" 
        update="#{cc.attrs.ajaxRenderTargets}" /> 
     </p:calendar> 
    </composite:implementation> 
</html> 

含複合部件引用的頁面:

<ui:composition template="/templates/primefaces/masterLayout.xhtml"> 

    <ui:param name="title" value="#{bundle.primeFacesCalendarCC_description}" /> 

    <ui:define name="content"> 
     <h:form id="contentForm"> 
      <h:panelGrid columns="3"> 
       <h:outputText 
         value="Initially empty Date reference on managed bean" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC1" 
         dateValue="#{primeFacesTestBean.userSubmittedDateTime}" 
         ajaxRenderTargets="messagesCalendar1 :ajaxRenderTargetsInTemplate" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar1" 
         showSummary="false" 
         showDetail="true" /> 

       <h:outputText 
         value="A 'new Date()' reference on managed bean" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC2" 
         dateValue="#{primeFacesTestBean.newDateInstance}" 
         ajaxRenderTargets="messagesCalendar2 :ajaxRenderTargetsInTemplate" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar2" 
         showSummary="false" 
         showDetail="true" /> 

       <h:outputText 
         value="Initially empty Date using ddHHmm'Z'MMMyy pattern" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC3" 
         dateValue="#{primeFacesTestBean.userSubmittedDateTime}" 
         ajaxRenderTargets="messagesCalendar2 :ajaxRenderTargetsInTemplate" 
         pattern="ddHHmm'Z'MMMyy" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar3" 
         showSummary="false" 
         showDetail="true" /> 

      </h:panelGrid> 
     </h:form> 
    </ui:define> 

</ui:composition> 

<ui:composition template="/templates/primefaces/masterLayout.xhtml"> 

    <ui:param name="title" value="#{bundle.primeFacesCalendarCC_description}" /> 

    <ui:define name="content"> 
     <h:form id="contentForm"> 
      <h:panelGrid columns="3"> 
       <h:outputText 
         value="Initially empty Date reference on managed bean" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC1" 
         dateValue="#{primeFacesTestBean.userSubmittedDateTime}" 
         ajaxRenderTargets="messagesCalendar1 :ajaxRenderTargetsInTemplate" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar1" 
         showSummary="false" 
         showDetail="true" /> 

       <h:outputText 
         value="A 'new Date()' reference on managed bean" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC2" 
         dateValue="#{primeFacesTestBean.newDateInstance}" 
         ajaxRenderTargets="messagesCalendar2 :ajaxRenderTargetsInTemplate" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar2" 
         showSummary="false" 
         showDetail="true" /> 

       <h:outputText 
         value="Initially empty Date using ddHHmm'Z'MMMyy pattern" /> 
       <sandbox:primeFacesCalendar 
         id="calendarCC3" 
         dateValue="#{primeFacesTestBean.userSubmittedDateTime}" 
         ajaxRenderTargets="messagesCalendar2 :ajaxRenderTargetsInTemplate" 
         pattern="ddHHmm'Z'MMMyy" 
         required="true" /> 
       <p:messages 
         id="messagesCalendar3" 
         showSummary="false" 
         showDetail="true" /> 

      </h:panelGrid> 
     </h:form> 
    </ui:define> 

</ui:composition> 

的管理豆:

@ManagedBean(name="primeFacesTestBean") 
@SessionScoped 
public class PrimeFacesTestBean implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private Date userSubmittedDateTime = null; 
    private Date newDateInstance = new Date(); 

    public void setUserSubmittedDateTime(Date userSubmittedDateTime) { 
     this.userSubmittedDateTime = userSubmittedDateTime; 
    } 

    public Date getUserSubmittedDateTime() { 
     return userSubmittedDateTime; 
    } 

    public void setNewDateInstance(Date newDateInstance) { 
     this.newDateInstance = newDateInstance; 
    } 

    public Date getNewDateInstance() { 
     return newDateInstance; 
    } 

    public void calendarValueChangeHandler(AjaxBehaviorEvent event) { 
     //System.out.println("calendar value has been changed (Ajaxified)"); 
    } 

} 

回答

1

定爲8月18日的3.0-M3的快照:
http://code.google.com/p/primefaces/issues/detail?id=2215

證實,它利用8月23日的3.0-M3的快照正常工作在我的web應用程序。

注意:自定義格式問題未包括在此缺陷中。我不確定這是否已解決或仍然是問題。