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;
}
No comments:
Post a Comment