Friday, 1 November 2013

Java: @ModelAttribute

Masalah: properties yang tiada element pada .jsp disetkan sebagai null.


Cara mengatasinya adalah menggunakan @ModelAttribute di mana ada 2 jenis yang boleh disemak pada docs spring-framework.

@ModelAttribute pada function akan dipanggil pabila sesuatu model yang serupa pada parameter ditemui.

UPDATE! walaupun tanpa @ModelAttribute("studyLeaveSupervisor") di hadapan StudyLeaveSupervisor dalam parameter @RequestMapping, function pada @ModelAttribute tetap dipanggil.

Jadi kita boleh gunakan function ini untuk dapatkan data daripada DB contohnya. Kemudian data ini akan di-override oleh value pada page.

@ModelAttribute
      /**  
       * Init data daripada DB ke dalam model sebelum di-override oleh data daripada form apabila jumpa parameter yang declared  
       * sebagai <code>@ModelAttribute("studyLeaveSupervisor") </code>. Ini adalah untuk elakkan field yang tiada dalam form di-set value-nya kepada null.  
       * ModelAttribute akan dipanggil sebelum mana-mana RequestMapping yang berkaitan.  
       * @param p2 nama field dalam page  
       * @param slsStudyleaveRefcode nama field dalam page  
       * @param slsSupervisorId nama field dalam page  
       * @return  
       */  
      @ModelAttribute("studyLeaveSupervisor")  
      public StudyLeaveSupervisor preloadStudyLeaveSupervisor( String p2, String slsStudyleaveRefcode, String slsSupervisorId) {  
         if( !StringUtil.isEmpty(slsStudyleaveRefcode) && !StringUtil.isEmpty(p2) && !StringUtil.isEmpty(slsSupervisorId) )  
         {  
                 StudyLeaveSupervisorKey key = new StudyLeaveSupervisorKey();  
                key.setSlsStartDate( DateUtil.parseYYYYMMDDDate( p2 ) );  
                key.setSlsStudyleaveRefcode(slsStudyleaveRefcode);  
                key.setSlsSupervisorId(slsSupervisorId);  
                System.out.println("\t>> loadStudyLeaveSupervisor = " + key.toString() );  
                return studyLeaveService.getSupervisorById(key);  
         }  
         else{  
              return new StudyLeaveSupervisor();  
         }  
      }  

@RequestMapping

      @RequestMapping(method = RequestMethod.PUT)  
      public String update(@ModelAttribute("studyLeaveSupervisor") @Valid StudyLeaveSupervisor studyLeaveSupervisor,   
                BindingResult bindingResult, Model uiModel, HttpServletRequest request, HttpSession session)   
      {  
           MessageObject msj = new MessageObject();  
           try{  
                if (studyLeaveSupervisor != null){  
                     studyLeaveSupervisor.setSlsUpdateDate( new Date() );  
                     studyLeaveSupervisor.setSlsUpdateBy( StringUtil.getString( session.getAttribute( SystemConstant.VAR_SESSION_USERID ) ) );  
                     logger.debug("\tupdate: \tsupervisor = " + studyLeaveSupervisor.toString());  
                     studyLeaveService.updateStudyLeaveSupervisor(studyLeaveSupervisor);  
                }  
                msj = new MessageObject(false, "Successfully update record.", null, studyLeaveSupervisor.getSlsSupervisorId());  
           }catch(Exception e){  
                msj = new MessageObject(true, "Fail to update record.", e.getMessage(), studyLeaveSupervisor.getSlsSupervisorId());  
                e.printStackTrace();  
                uiModel.addAttribute( ViewVariables.VAR_MSJ_GENERIC, msj);  
                return ADD_EDIT_PAGE_URL;  
           }  
           uiModel.addAttribute( ViewVariables.VAR_MSJ_GENERIC, msj);  
           return "redirect:"+LIST_FULLMAPPING;  
      }  

Friday, 18 October 2013

JS: Toggle Visibility

<!--
  function toggle_visibility(id, div_id) {
     var e1 = document.getElementById(id);
     var e2 = document.getElementById(div_id);
     
     if(e1.value=='OTHERS')
    e2.style.display='block';
   else
    e2.style.display='none';
  }
  //--> 

Thursday, 17 October 2013

Edit launch config server pada STS

Double click server

Click "Open launch configuration"

Tukar config secukup rasa.

Tuesday, 3 September 2013

Simple ANT build.xml run in STS

ANT akan memudahkan proses kompil projek ke dalam pakej yang sesuai untuk deployment.
ANT menggunakan satu fail yang lazimnya dinamakan build.xml yang mengandungi arahan salinan fail daripada source-code kepada arkib.
Spring Tool Suite telah mempunyai plug-in yang memudahkan penggunaan ANT.

Right click build.xml
Pilih target yang sesuai, default telah disetkan kepada war di mana *.war akan dihasilkan.
Mesej setelah semua proses selesai.

Boleh rujuk kepada Help dalam STS untuk bantuan menggunakan ANT Support:



Rujukan:


Thursday, 18 July 2013

Tipikal STS 3.3.0 Config

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20130521-0416
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-vmargs eclipse -vm c:\jdk6u22\jre\bin\javaw
-Duser.name=developer name
-Dosgi.requiredJavaVersion=1.6
-Xmn512m
-Xms1024m
-Xmx2048m
-XX:PermSize=1024m
-XX:MaxPermSize=2048m

Wednesday, 17 July 2013

org.xml.sax.helpers.SecuritySupport12 cannot access its superclass org.xml.sax.helpers.SecuritySupport

Error:


java.lang.IllegalAccessError: class org.xml.sax.helpers.SecuritySupport12 cannot access its superclass org.xml.sax.helpers.SecuritySupport

berlaku ketika cuba run kod di atas Tomcat 7 dengan JDK 1.7

Penyelesaian:

masukkan property metadata-complete="true" dalam web.xml

Contoh:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0" metadata-complete="true">


Rujukan:


Unsupported major.minor version 51.0

Masalah ini didapati ketika cuba run sistem Online.

Environment:

  • Spring Tool Suite (STS 2.9.2)
  • Tomcat 7
  • JDK 1.7
Punca:
  • Class dikompil menggunakan JDK 1.7 manakala Tomcat 7 ketika itu diset untuk gunakan JDK 1.6
Penyelesaian:
  • Set server untuk run gunakan JDK 1.7.