従業員の出席をマークする次の機能があります。
public void updateDailyAttendance(ActionRequest areq, ActionResponse aRes) throws Exception {
int totalEmployees = EmployeeLocalServiceUtil.getEmployeesCount();
List<Employee> employeeAttendanceDetails = MISPortalActionUtil.getEmployeeData();
String datt = areq.getParameter("datt");
String Imatt = areq.getParameter("matt");
String yatt = areq.getParameter("yatt");
int Lmatt = Integer.parseInt(Imatt);
String matt = Integer.toString(Lmatt +1);
String dateOfAttendance = datt +"/"+ matt +"/"+ yatt;
SimpleDateFormat dateOfAttendanceFormat = new SimpleDateFormat("dd/MM/yyyy");
java.util.Date date_Of_Attendance = dateOfAttendanceFormat.parse(dateOfAttendance);
System.out.println("Today's attendance date is: " + date_Of_Attendance);
ArrayList<String> attNames = new ArrayList<String>();
for (Employee emp: employeeAttendanceDetails) {
long empId = emp.getEmpId();
String name = "updateattendance" + " " +Long.toString(emp.getEmpId());
System.out.println("updateattendance name : " + name);
String value = getAttendanceValue(areq,name);
System.out.println("updateattendance value : " + value);
long attPKey = CounterLocalServiceUtil.increment(Employee.class.getName());
Attendance newAttendanceInstance = new AttendanceImpl();
String checkAttMarkStatus = newAttendanceInstance.getAttStatus();
System.out.println("checkAttMarkStatus: " + checkAttMarkStatus);
//loop to mark the attendance if it has not been pre marked
if(checkAttMarkStatus != "Absent" || checkAttMarkStatus != "Half Day" ) {
newAttendanceInstance.setAttId(attPKey);
newAttendanceInstance.setAttDate(date_Of_Attendance);
newAttendanceInstance.setAttStatus(value);
newAttendanceInstance.setAttANStatus(value);
newAttendanceInstance.setAttFNStatus(value);
newAttendanceInstance.setEmpId(empId);
AttendanceLocalServiceUtil.addAttendance(newAttendanceInstance);
}//loop to mark the attendance if it has not been pre marked
}
}
/**
* The getAttendanceValue() is used to fetch parameter values and pass the values to updateDailyAttendance function
* @param areq
* @return
* @throws SystemException
*/
private String getAttendanceValue(ActionRequest areq, String paramName) {
Enumeration parameters = areq.getParameterNames();
System.out.println("updateattendance paramName : " + paramName);
while (parameters.hasMoreElements()) {
System.out.println("updateattendance paramName inside while : " + paramName);
String parameterName = parameters.nextElement().toString();
System.out.println("updateattendance paramName new : " + paramName);
System.out.println("the paramName " + paramName + " parameterName " + parameterName);
if (paramName.equals(parameterName)) {
return areq.getParameter(parameterName);
}
}
throw new IllegalStateException("Parameter updateattendance is not found");
}
私のjspでは、従業員のリストが作成され、ユーザーはラジオボタンを使用して出席をマークできます。このアプローチは、すべての従業員の出席をマークするときにうまく機能します。しかし、出席状況を事前にマークしているときに問題が発生します。ユーザーが休暇を申請するたびに、出席ステータスが事前にマークされ、この従業員の出席をマークするための出席フォームがマークされ、無効になっていると表示されます。そのため、事前にマークされた出席が存在するときに出席をマークしようとすると、他の従業員の出席はマークされません。元。4 番目のエントリが事前に不在としてマークされていて、他の従業員の出席をマークした場合、最初の 3 つのエントリのみがデータベースに追加され、4 番目のエントリが見つからず、不正な例外がスローされるとします: Parameter updateattendance is not found
目的に合わせて getAttendanceValue() 関数を変更するにはどうすればよいですか?
編集:
値を取得している JSP 部分:
<label>Present</label><input type = "radio" name ='updateattendance <%=((Object[])search)[5]%>' value = "Present" />
<label>Absent</label><input type = "radio" name= 'updateattendance <%=((Object[])search)[5]%>' value = "Absent" />
上記のコードでは、事前にマークされているかどうかを確認しています。事前にマークされた出席チェックのために、上記のコードフラグメントを if-else ブロックに入れました