0

我有一个模块,我必须更新每个学生的出勤率。代码如下:

public void updateDailyAttendance(ActionRequest areq, ActionResponse aRes) throws Exception{ 

int totalEmployees = EmployeeLocalServiceUtil.getEmployeesCount();
String attendanceValue = getAttendanceValue(areq);
//long attPKey = CounterLocalServiceUtil.increment(Employee.class.getName());
for (int i = 0; i < totalEmployees; i++) {
// use attendanceValue to update employee entry
//String attendanceValue = getAttendanceValue(areq);
// parameterValue is value of radio button parameter


long attPKey = CounterLocalServiceUtil.increment(Employee.class.getName());

Attendance newAttendanceInstance = new AttendanceImpl();
newAttendanceInstance.setAttId(attPKey);
                            newAttendanceInstance.setAttStatus(attendanceValue);
                        AttendanceLocalServiceUtil.addAttendance(newAttendanceInstance);

} }

 private String getAttendanceValue(ActionRequest areq) {
 Enumeration parameters = areq.getParameterNames();

while (parameters.hasMoreElements()) {
   String parameterName = parameters.nextElement().toString();
if (parameterName.startsWith("updateattendance")) {
    return areq.getParameter(parameterName);
 }
 }
throw new IllegalStateException("Parameter updateattendance cannot be found!!");
}

当我使用上面的代码时,我的数据库得到更新,但出勤(为第一位员工输入的出席/缺席被视为其他员工的值,即使我为其他员工标记了不同的值(出席/缺席)

我应该如何修改上面的代码,以便存储为每个员工输入的单选按钮值?

4

3 回答 3

1

你在循环之前得到attendanceValue 唯一的一次。getAttendanceValue只返回一个字符串,那么attendanceValue两个学生之间怎么可能不同呢?

String attendanceValue = getAttendanceValue(areq);

这就是为什么所有attendanceValue的 s 都是一样的。您需要做的是更新 for 循环中每个员工的值。

于 2013-04-09T06:10:08.483 回答
1

这是因为您只获取一个出席值。在这一行中“字符串出勤值 = getAttendanceValue(areq);” 你得到第一个员工的出席。但是在 getAttendanceValue 方法中

while (parameters.hasMoreElements()) {
   String parameterName = parameters.nextElement().toString();
if (parameterName.startsWith("updateattendance")) {
    return areq.getParameter(parameterName);
 }
 }

此代码仅检查其是否以 updateattendance 开头,该值始终满足第一条记录并返回该值。您可以通过检查用于使“updateattendance”唯一的后缀来存储不同员工的记录,如果它是某个数字,那么您可以将其存储在 ArrayList 中,索引作为 updateattendance 之后的数字。而不是返回 Strig,您可以返回该 ArrayList

于 2013-04-09T06:18:16.807 回答
1

这是更好的方法,而不是使用 Map 与 EmpId 作为 Key 和 updateattendanc 作为值。

Map<String, String> mapEmpAttendance = new HashMap<String, String>(); 
while (parameters.hasMoreElements()) {
    String parameterName = parameters.nextElement().toString();
    String value = "";
    if (parameterName.startsWith("updateattendance")) {
            value = areq.getParameter(parameterName);
            map.put(parameterName.substring(16, parameterName.length), value)
    }
 } 
return mapEmpAttendance;
于 2013-04-10T06:10:21.127 回答