0

我有以下功能来标记员工的出勤率:

            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个条目被预先标记为缺席,而我为其他员工标记出勤,那么数据库中只添加了前三个条目,然后它没有找到第四个条目并抛出非法异常:参数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 块中以进行预先标记的出勤检查

4

1 回答 1

0

你这样做:

  Attendance newAttendanceInstance = new AttendanceImpl();
  String checkAttMarkStatus = newAttendanceInstance.getAttStatus(); // most likely null or ""
  System.out.println("checkAttMarkStatus: " + checkAttMarkStatus);

因此,我不希望您刚刚创建的对象在不引用先前状态的情况下保持正确的状态。我的期望是 checkAddMarkStatus 现在是 "" (空字符串)或null

进一步检查字符串的身份,而不是相等性(这是java中的一个巨大差异:

  if(checkAttMarkStatus != "Absent" || checkAttMarkStatus != "Half Day" ) {

您应该使用String.equal(并注意null值),但由于上述问题,如果不理清这两个问题,这将无济于事。可能还有更多,但这是我第一眼发现的。

在评论和您的问题更新之后,我仍然无法看到代码中的实际意图。但是,我建议不要像您在看起来并不异常的情况下那样使用异常-而是使用正确的返回值并检查这些值-例如,如果有人从未参加过,请有一个值来发出信号并做出相应的反应. 如果你抛出一个异常并且没有捕获它,你必须期待你提到的事情(例如半执行的方法)

于 2013-06-03T06:52:15.940 回答