マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

RatingPanelを使ってみる

評価を星の数などで表すときに使うRatingPanelというのを使ってみた。wicket-extensionsが必要

星(別の画像でもOK)をクリックするとonRatedが呼び出されるけど、これを無視してボタンで星を増やすようにして参加者数や多数決などを星の数で表すことができると思う。星の数はデフォルトで5だけど増やすことができるみたいなんで

onRatedでクリックした星の位置(1から始まる)を受け取って、onIsStarActiveでその星がActiveかどうかを返して、trueを返せば色付きの星を表示して、falseなら黒い星になる(デフォルトでは)。

まずHTML RatingPage.html

<html>
  <head>
    <title>Rating Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <span wicket:id="rating"></span>
  </body>
</html>

次に対応するJavaのプログラム、RatingPage.java

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.extensions.rating.RatingPanel;
import org.apache.wicket.ajax.AjaxRequestTarget;

import java.util.List;
import java.util.ArrayList;

public class RatingPage extends WebPage{
    //色付きの星の番号のリスト
    List<Integer> stars;
    
    public RatingPage(){
        stars = new ArrayList<Integer>();

        RatingPanel panel = new RatingPanel("rating"){
            @Override
            protected boolean onIsStarActive(int star){
                //色付きの星の番号のリストに入ってればtrue、そうでなければfalse
                return stars.contains(star);
            }

            protected void onRated(int star, AjaxRequestTarget target){
                stars.clear();

                //クリックされた星の位置までの星の番号をリストに入れる
                for(int i = 0; i < star; i++)
                    stars.add(i);
            }
        };
        
        add(panel);
    }
}

アプリケーションクラスとフィルタマッピングは省略