Невозможно обновить базу данных из-за предварительно отмеченной посещаемости (значений) Liferay

У меня есть следующие функции, чтобы отметить посещаемость сотрудника:

            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 не найден

Как мне изменить функцию 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 для предварительно отмеченной проверки посещаемости.


person Seeya K    schedule 03.06.2013    source источник


Ответы (1)


Вы делаете это:

  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), но из-за проблемы, описанной выше, это не поможет вам, не разобравшись с обеими проблемами. Может быть и больше, но это то, что я нашел с первого взгляда.

После комментариев и обновления вашего вопроса мне все еще не хватает фактического намерения в коде. Однако я бы посоветовал не использовать исключение, как вы, для случая, который не кажется исключительным, а использовать правильные возвращаемые значения и проверять эти значения - например. если кто-то никогда не присутствовал, имейте значение, чтобы сигнализировать об этом и реагировать соответствующим образом. Если вы выдаете исключение и не перехватываете его, вы должны ожидать таких вещей, как вы упомянули (например, наполовину выполненные методы)

person Olaf Kock    schedule 03.06.2013
comment
Привет, Олаф, спасибо за быстрый ответ. Ошибка возникает из функции getAttendanceValue(). Я могу ошибаться, но то, что я чувствую, происходит, поскольку статус посещаемости сотрудника предварительно отмечен, он не может найти его и выдает ошибку. Это моя дикая догадка. Поскольку всегда возникает исключение, когда встречается предварительно отмеченное присутствие, а следующие записи не обновляются. - person Seeya K; 03.06.2013
comment
ну, тогда было бы полезно указать это в вашем вопросе. До сих пор вы разместили свой код и указали, что не работает, а не то, что у вас есть явное место для создания исключения. Вы окружили этот код большим количеством System.out.println - я ожидаю, что это даст много подсказок, в чем проблема, например. какие значения вы на самом деле даете. Я никогда не работал с параметрами, содержащими пробелы в своих именах (вы, кажется, делаете это), просто потому, что я ожидаю случайных проблем в зависимости от среды, в которой работает код (даже если это может быть в спецификации - я не я знаю) - person Olaf Kock; 03.06.2013
comment
Да, это моя ошибка, что я не указал все в вопросе. я обновил свои вопросы - person Seeya K; 03.06.2013