2012-09-29 64 views
0

我有一個顯示用戶活動的JSF表。如何始終顯示本週的最後一天

<p:lineChart id="logins" value="#{StatisticsController.weekActivity}" legendPosition="e" 
           title="Weekly Logins" seriesColors="4D94FF, 1975FF, 005CE6, 0047B2" minY="0" maxY="200"/> 


public class Statistics implements Serializable { 

    private CartesianChartModel weeksActivity; 

    public Statistics() { 
     createweeksActivity(); 

    } 

    public CartesianChartModel getweekActivity() { 
     return weeksActivity; 
    } 

    private void createweeksActivity() { 
     weeksActivity = new CartesianChartModel(); 

     ChartSeries boys = new ChartSeries(); 
     boys.setLabel("Active Accounts"); 

     boys.set("Monday", 120); 
     boys.set("Tuesday", 100); 
     boys.set("Wednesday", 44); 
     boys.set("Thursday", 150); 
     boys.set("Friday", 120); 
     boys.set("Saturday", 82); 
     boys.set("Sunday", 115); 

     ChartSeries girls = new ChartSeries(); 
     girls.setLabel("Blocked Accounts"); 

     girls.set("Monday", 52); 
     girls.set("Tuesday", 60); 
     girls.set("Wednesday", 110); 
     girls.set("Thursday", 135); 
     girls.set("Friday", 120); 
     girls.set("Saturday", 140); 
     girls.set("Saturday", 130); 
     girls.set("Sunday", 140); 

     weeksActivity.addSeries(boys); 
     weeksActivity.addSeries(girls); 
    } 


} 

我想顯示當天總是最後的順序。例如: 現在我得到這樣的順序:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday 舉例來說,如果今天是週三,我想,當我打開網頁得到這個順序:

Thursday, Friday, Saturday, Sunday, Monday, Tuesday, Wednesday 

我怎麼能解決這個問題?

EDIT: 

我更新的代碼是這樣的:

private void createweeksActivity() 
    { 

     weeksActivity = new CartesianChartModel(); 

     ChartSeries activeAccounts = new ChartSeries(); 
     activeAccounts.setLabel("Active Accounts"); 

     ChartSeries blockedAccounts = new ChartSeries(); 
     blockedAccounts.setLabel("Blocked Accounts"); 

     GregorianCalendar calendar = new GregorianCalendar(); 
     DateFormat df = new SimpleDateFormat("EEEE"); 
     for (int i = 0; i < 7; i++) 
     { 
      calendar.add(Calendar.DATE, 1); 
      System.out.println(df.format(calendar.getTime())); 
      activeAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime()))); 
      blockedAccounts.set(df.format(calendar.getTime()), getNumberOfLogins(df.format(calendar.getTime()))); 
     }  

     weeksActivity.addSeries(activeAccounts); 
     weeksActivity.addSeries(blockedAccounts); 
    } 

    public int getNumberOfLogins(String day){ 

     // Get here the number of logins using SQL command 
     // Example: SELECT * FROM HISTORY WHERE DAY = day; 

     return 100; 
    } 

我想它會成功。

回答

5
GregorianCalendar calendar = new GregorianCalendar(); 
DateFormat df = new SimpleDateFormat("EEEE"); 
for (int i = 0; i < 7; i++) { 
    calendar.add(Calendar.DATE, 1); 
    System.out.println(df.format(calendar.getTime())); 
} 

的GregorianCalendar代表某個時刻,我們的公曆。它的無參數構造函數將其初始化爲當前時間。

DateFormat用於格式化日期。您可以使用getTime()方法將(Gregorian)Calendar轉換爲日期。 「EEEE」是指一週中最長的一天。

(Gregorian)Calendar.add()方法允許向日歷(年,月,日期,小時等)的任何字段添加值。既然你想遍歷一週中的每一天,我從明天開始,每次迭代增加1天。

一切都在the javadoc

+0

+1非常乾淨實用:D – gtgaxiola

+0

請您稍微擴展一下代碼。我是Java新手。我需要一點解釋我如何使用這段代碼。 –

+0

即時通訊+1 –

1

根據日曆,將星期幾作爲地圖顯示爲星期幾的日期。

然後使用日曆獲取當前日期並使用模塊化算法更改排序。

喜歡的東西:

//This you can do it one time and then use it in your program 
Map<Integer, String> daysOfWeek = new HashMap<Integer,String>(); 
daysOfWeek.put(Calendar.MONDAY, "Monday"); 
daysOfWeek.put(Calendar.TUESDAY, "Tuesday"); 
//so on and so forth. 



//Now the code that will be running 
//You get your current Day (Which will be the last one you want to see) 
int weekday = calendar.get(Calendar.DAY_OF_WEEK); 

//Start with next value (modulus 7 since you don't want overflow) 
int currDay = (weekday+1) % 7; 


//Go over the seven Days 
for(int i = 0; i < 7; i++) { 
    String currDay = daysOfWeek.get(currDay); //Get your Day String 

    //Here do whatever you need to do to set up the DAY in JSF 

    currDay = (currDay+1) % 7; //Moving currDay to the next Day 
} 
相關問題