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中使用映射,而是编写将映射值作为列表公开的包装器组件。只要我的两分钱。。。