如何将动态日期值设置为 Map<String,Object>?
how to set dynamic Date value to Map<String,Object>?
我想将动态日期值设置为 Map<String,Object>
并在 UI 中显示。我正在研究 JSF2。这是我的代码
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;
}
我有一个带有标签 "First Date" 和 "Second Date" 的下拉列表,现在我必须动态地为这些键分配值。如果我给出如下它不起作用:
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
.
您正在使用非静态初始化代码块。此代码仅在创建包含 class 的实例时执行。这是我尝试使用您的代码时得到的结果
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();
,我会正常工作并显示日期变量的格式化版本。
除非您出于非常具体的原因需要使用非静态初始化块,否则我建议您创建一个简单的地图初始化方法,例如
public void initMap() {
selectDates = new LinkedHashMap<String, Object>();
selectDates.put("First Date", exDate); //label, value
selectDates.put("Second Date", frontDate);
}
而且只有在你确定这两个日期都初始化好后才会调用。如果必须使用非静态块,则需要先正确初始化日期对象。
关于使用非静态初始化代码块的更多有用信息here
和 here
我想将动态日期值设置为 Map<String,Object>
并在 UI 中显示。我正在研究 JSF2。这是我的代码
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;
}
我有一个带有标签 "First Date" 和 "Second Date" 的下拉列表,现在我必须动态地为这些键分配值。如果我给出如下它不起作用:
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
.
您正在使用非静态初始化代码块。此代码仅在创建包含 class 的实例时执行。这是我尝试使用您的代码时得到的结果
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();
,我会正常工作并显示日期变量的格式化版本。
除非您出于非常具体的原因需要使用非静态初始化块,否则我建议您创建一个简单的地图初始化方法,例如
public void initMap() {
selectDates = new LinkedHashMap<String, Object>();
selectDates.put("First Date", exDate); //label, value
selectDates.put("Second Date", frontDate);
}
而且只有在你确定这两个日期都初始化好后才会调用。如果必须使用非静态块,则需要先正确初始化日期对象。
关于使用非静态初始化代码块的更多有用信息here 和 here