public String reportByMark(){
        preReportByMark();
        
        boolean check = true;
        if(stdo.getStrMark().isEmpty()){
            check = false;
            addFieldError("stdo.strMark", "You must a value to mark");
        } else {
            try {
                stdo.setMark(Float.parseFloat(stdo.getStrMark()));
                if(stdo.getMark()<0 || stdo.getMark() > 100){
                    check = false;
                    addFieldError("stdo.strMark", "You must a value to mark which in [0, 100]");
                }
            } catch (Exception e) {
                check = false;
                addFieldError("stdo.strMark", "You must a float value to mark");
            }
        }
        
        if(check){
            students = mdReport.getStudentByMark(clo.getClassname(), ojto.getObjId(), tpo.getTopicId(), stdo.getMark());
            
            if(students.size() > 0){
                mMarkStatistics = new LinkedHashMap<Float, PairValue>();
                for (StudentObj studentObj : students) {
                    PairValue pair = mMarkStatistics.get(studentObj.getMark());
                    if(pair != null){
                        Integer countMark = Integer.valueOf(pair.getValue1()) + 1;
                        pair = new PairValue(countMark + "", (int)((countMark * 1.0/students.size()) * 100) + "");
                        mMarkStatistics.put(studentObj.getMark(), pair);
                    } else {
                        mMarkStatistics.put(studentObj.getMark(), new PairValue(1 + "", (int)((1.0/students.size()) * 100) + ""));
                    }
                }
            }
        }
        
        return SUCCESS;
    }