由于预先标记的出勤率(值)Liferay,无法更新数据库

时间:2013-06-03 06:31:21

标签: java radio-button liferay liferay-6 liferay-ide

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

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

我应该如何更改我的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块中,用于预先标记的出勤检查

1 个答案:

答案 0 :(得分: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值),但由于上述问题,如果不解决这两个问题,这将无法帮助您。可能会有更多,但这是我一见钟情。

在评论和您的问题更新后,我仍然缺少看到代码中的实际意图。但是,我建议不要使用像你那样的例外用于一个似乎不例外的情况 - 而是使用正确的返回值并检查这些值 - 例如如果有人从未参加,有价值发出信号并作出相应反应。如果你抛出一个异常并且没有抓住它,你必须期待像你提到的那样(例如半执行方法)

相关问题