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 番目のエントリが事前に不在としてマークされていて、他の従業員の出席をマークした場合、最初の 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 ブロックに入れました

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 に答える