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 たとえば、今日が水曜日の場合、Web ページを開いたときにこの順序を取得したい:

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;
    }

うまくいくと思います。

4

2 に答える 2

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 は、日付の書式設定に使用されます。メソッド(Gregorian)Calendarを使用して a を Date に変換できます。getTime()「EEEE」は、最長形式の曜日を意味します。

この(Gregorian)Calendar.add()メソッドを使用すると、カレンダーの任意のフィールド (年、月、日、時間など) に値を追加できます。曜日を反復したいので、明日から開始し、反復ごとに 1 日を追加します。

すべてがjavadocで利用可能です。

于 2012-09-29T18:09:25.090 に答える
1

カレンダーに従って、曜日を DAY OF WEEK 番号へのマップとして表示します。

次に、Calendar を使用して現在の日付を取得し、Modular Arithmetic を使用して順序を変更します。

何かのようなもの:

//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
 }
于 2012-09-29T18:09:23.040 に答える