Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JSF/PrimeFaces中显示包含dataTable中日期对象的HashMap的内容_Java_Jsf_Primefaces_Hashmap_Java 7 - Fatal编程技术网

Java 在JSF/PrimeFaces中显示包含dataTable中日期对象的HashMap的内容

Java 在JSF/PrimeFaces中显示包含dataTable中日期对象的HashMap的内容,java,jsf,primefaces,hashmap,java-7,Java,Jsf,Primefaces,Hashmap,Java 7,我创建了以下方法,它返回一个HashMap,其中键是Date对象,值是Date对象的列表。该方法接受时间戳的列表,并按天对它们进行分组。然后,它返回上述HashMap构造中的分组时间戳 public class GroupDatesByDay { HashMap<Date, List<Date>> groupedUserLogins = new HashMap<Date, List<Date>>(); Calendar cal

我创建了以下方法,它返回一个
HashMap
,其中键是
Date
对象,值是
Date
对象的
列表。该方法接受
时间戳的
列表
,并按天对它们进行分组。然后,它返回上述
HashMap
构造中的分组时间戳

 public class GroupDatesByDay {

    HashMap<Date, List<Date>> groupedUserLogins = new HashMap<Date, List<Date>>();
    Calendar cal = Calendar.getInstance();

    public HashMap<Date, List<Date>> parseTimeStamps(List<Date> timeStamps) {

    DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss.SSS", Locale.US);
    List<Date> timeStamps = new ArrayList<Date>();

        for (Date ts : timeStamps) {

            cal.setTime(ts);
            cal.set(cal.HOUR_OF_DAY, 0);
            cal.set(cal.MINUTE, 0);
            cal.set(cal.SECOND, 0);
            cal.set(cal.MILLISECOND, 0);

            if (!groupedUserLogins.containsKey(cal.getTime())) {

                groupedUserLogins.put(cal.getTime(), new ArrayList<Date>());
            }
            groupedUserLogins.get(cal.getTime()).add(ts);
        }

        keySet = groupedUserLogins.keySet();
        keyList.addAll(keySet);
        return groupedUserLogins;
    }
}

下面是我最终解决这个问题的方法。正如Melloware所建议的那样,我必须列出一份清单

我的实现略有改变:

private Hashtable<Date, List<Date>> groupedUserLogins = new Hashtable<Date, List<Date>>();
private Calendar cal = Calendar.getInstance();
private Set<Date> keySet = new TreeSet<Date>();
private List<Date> keyList = new ArrayList<Date>();
<p:dataTable var="loginDayDate" value="#{userEdit.keyList}"
    sortOrder="descending" sortBy="#{loginDayDate}" class="DataTable">

    <p:column width="15">
        <p:rowToggler />
    </p:column>

    <p:column headerText=" Recent Logins" width="110"
        sortBy="#{loginDayDate}">

        <h:outputLabel value="#{loginDayDate}">
            <f:convertDateTime pattern="#{Constants.DATE_FORMAT}" />

        </h:outputLabel>
    </p:column>
    <p:column headerText=" # of Logins" style="text-align : left">
        #{fn:length(userEdit.groupedUserLogins[loginDayDate])}
    </p:column>
    <p:rowExpansion>
        <p:dataTable var="specificDate"
            value="#{userEdit.groupedUserLogins[loginDayDate]}"
            class="DataTable">
            <p:column headerText="Time" style="text-align: left">
                <h:outputLabel value="#{specificDate}">
                    <f:convertDateTime pattern="#{Constants.DATETIME_FORMAT}" />
                </h:outputLabel>
            </p:column>
        </p:dataTable>
    </p:rowExpansion>
</p:dataTable>
private Hashtable groupedUserLogins=new Hashtable();
private Calendar cal=Calendar.getInstance();
私有设置键集=新树集();
private List keyList=new ArrayList();

公共哈希表parseUserLogin(列出用户登录名){
DateFormat DateFormat=新的SimpleDataFormat(“HH:mm:ss.SSS”,Locale.US);
列表时间戳=新的ArrayList();
for(UserLogin u:userLogins){
add(u.getTimeStamp());
}
for(日期ts:时间戳){
校准设定时间(ts);
校准设置(每天校准小时,0);
校准设置(校准分钟,0);
校准设置(校准秒,0);
校准设置(校准毫秒,0);
dateFormat.format(ts);
如果(!groupedUserLogins.containsKey(cal.getTime())){
groupedUserLogins.put(cal.getTime(),new ArrayList());
}
groupedUserLogins.get(cal.getTime()).add(ts);
}
keySet=groupedUserLogins.keySet();
keyList.addAll(键集);
返回组序列号;
}
我的XHTML:

private Hashtable<Date, List<Date>> groupedUserLogins = new Hashtable<Date, List<Date>>();
private Calendar cal = Calendar.getInstance();
private Set<Date> keySet = new TreeSet<Date>();
private List<Date> keyList = new ArrayList<Date>();
<p:dataTable var="loginDayDate" value="#{userEdit.keyList}"
    sortOrder="descending" sortBy="#{loginDayDate}" class="DataTable">

    <p:column width="15">
        <p:rowToggler />
    </p:column>

    <p:column headerText=" Recent Logins" width="110"
        sortBy="#{loginDayDate}">

        <h:outputLabel value="#{loginDayDate}">
            <f:convertDateTime pattern="#{Constants.DATE_FORMAT}" />

        </h:outputLabel>
    </p:column>
    <p:column headerText=" # of Logins" style="text-align : left">
        #{fn:length(userEdit.groupedUserLogins[loginDayDate])}
    </p:column>
    <p:rowExpansion>
        <p:dataTable var="specificDate"
            value="#{userEdit.groupedUserLogins[loginDayDate]}"
            class="DataTable">
            <p:column headerText="Time" style="text-align: left">
                <h:outputLabel value="#{specificDate}">
                    <f:convertDateTime pattern="#{Constants.DATETIME_FORMAT}" />
                </h:outputLabel>
            </p:column>
        </p:dataTable>
    </p:rowExpansion>
</p:dataTable>

#{fn:length(userEdit.groupedUserLogins[loginDayDate]))
外观:

private Hashtable<Date, List<Date>> groupedUserLogins = new Hashtable<Date, List<Date>>();
private Calendar cal = Calendar.getInstance();
private Set<Date> keySet = new TreeSet<Date>();
private List<Date> keyList = new ArrayList<Date>();
<p:dataTable var="loginDayDate" value="#{userEdit.keyList}"
    sortOrder="descending" sortBy="#{loginDayDate}" class="DataTable">

    <p:column width="15">
        <p:rowToggler />
    </p:column>

    <p:column headerText=" Recent Logins" width="110"
        sortBy="#{loginDayDate}">

        <h:outputLabel value="#{loginDayDate}">
            <f:convertDateTime pattern="#{Constants.DATE_FORMAT}" />

        </h:outputLabel>
    </p:column>
    <p:column headerText=" # of Logins" style="text-align : left">
        #{fn:length(userEdit.groupedUserLogins[loginDayDate])}
    </p:column>
    <p:rowExpansion>
        <p:dataTable var="specificDate"
            value="#{userEdit.groupedUserLogins[loginDayDate]}"
            class="DataTable">
            <p:column headerText="Time" style="text-align: left">
                <h:outputLabel value="#{specificDate}">
                    <f:convertDateTime pattern="#{Constants.DATETIME_FORMAT}" />
                </h:outputLabel>
            </p:column>
        </p:dataTable>
    </p:rowExpansion>
</p:dataTable>

您是否尝试过这样做:我忽略了这一点,以使我的代码看起来更干净,避免堆栈溢出。问题是如何从Hashmap中获取这些值并显示它们。您的意思是要迭代列表?使用
ui:按照以下步骤重复
:-这是不可能的。请通读我的问题。我正在尝试使用方括号访问HashMap的内容。dataTable/column构造已经在值上迭代了。我知道你们已经脱机了,但别忘了在下面发布最终的解决方案。我不想插嘴,但我通常避免在JSF中使用映射,而是编写将映射值作为列表公开的包装器组件。只要我的两分钱。。。