2015-04-06 50 views
1

我想將動態日期值設置爲Map<String,Object>並在UI中顯示。我正在JSF2上工作。這裏是我的代碼如何將動態Date值設置爲Map <String,Object>?

private Map<String, Object> selectDates; 
    { 
     selectDates = new LinkedHashMap<String, Object>(); 
     selectDates.put("First Date", "111"); //label, value 
     selectDates.put("Second Date", "222"); 
    } 
    public Map<String, Object> getSelectDates() 
     { 
      return selectDates; 
     } 

我有一個下拉與標籤「第一次約會」和「第二次約會」,現在我要值動態分配給這些鍵。如果我給下面這不起作用:

private Date exDate; 
private Date frontDate; 
private Map<String, Object> selectDates; 
    { 
     selectDates = new LinkedHashMap<String, Object>(); 
     selectDates.put("First Date", exDate;); //label, value 
     selectDates.put("Second Date", frontDate;); 
    } 

public Map<String, Object> getSelectDates() { 
    return selectDates; 
} 

我嘗試使用private Map<String, Date> selectDates;但是這並沒有給我價值,它給了我null

+1

更多有用的相關信息確認'exDate'和'frontDate'是把它們放入'Map'之前進行初始化。 –

+0

感謝您的回覆。如果我初始化它們,我得到當前日期的值,但我不想要當前日期,exDate和frontDate是來自DB的日期值。 – aradhya

+0

我的意思是,初始化它們(從任何你需要的數據源開始),然後把日期放在'Map'中。你可能應該在你的bean的'@ PostConstruct'方法中做這件事,而不是在初始化塊中。 –

回答

1

您正在使用非靜態初始化代碼塊。只有在創建包含類的實例時纔會執行此代碼。這裏是我有什麼,當我試圖用你的代碼

public class DatesInHash { 

    private Date exDate; 
    private Date frontDate; 
    private Map<String, Object> selectDates; 
    { 
     //exDate = new Date(); 
     selectDates = new LinkedHashMap<String, Object>(); 
     selectDates.put("First Date", exDate); //label, value 
     selectDates.put("Second Date", frontDate); 
    } 

    public Map<String, Object> getSelectDates() { 
     return selectDates; 
    } 

    public void doDemo() { 
     exDate = new Date(); 
     frontDate = new Date(); 
     Map<String, Object> datesMap = getSelectDates(); 

     System.out.println(((Date)datesMap.get("First Date")).toString()); 

    } 

    public static void main(String[] args) { 
     DatesInHash dIH = new DatesInHash(); 
     dIH.doDemo(); 

    } 

} 

當我因爲在對象被構造非一時執行這個應用程序,我得到一個空指針異常 - 靜態塊被調用和自你的兩個Date變量是空的,它會觸發異常。

但是,如果我取消註釋此行代碼//exDate = new Date();,我會正常工作,並顯示格式化的日期變量版本。

除非你需要使用非 - 靜態iniatialization集團的一個非常特殊的原因,我建議你創建自己的地圖,如

public void initMap() { 

    selectDates = new LinkedHashMap<String, Object>(); 
    selectDates.put("First Date", exDate); //label, value 
    selectDates.put("Second Date", frontDate); 


} 

的簡單的初始化方法,它纔會被稱爲你後確定這兩個日期已經很好地初始化了。如果使用非靜態塊是強制性的,那麼你需要首先正確地初始化你的日期對象。對使用非靜態初始化代碼塊herehere

+0

感謝您的信息。它的工作:) – aradhya

+0

@aradhya,請接受我的答案,如果它爲你工作 – alainlompo

+0

對不起,我是這個網站的新手。我如何接受? – aradhya

相關問題