30 Temmuz 2018 Pazartesi

SpringValidation MethodValidationPostProcessor Sınıfı

setValidator metodu
Şöyle yaparız.
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
  MethodValidationPostProcessor mvProcessor = new MethodValidationPostProcessor();
  mvProcessor.setValidator(validator());
  return mvProcessor;
}

@Bean
public LocalValidatorFactoryBean validator() {
  LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
  validator.setProviderClass(HibernateValidator.class);
  validator.afterPropertiesSet();
  return validator;
}

SpringValidation LocalValidatorFactoryBean Sınıfı

setProviderClass metodu
Şöyle yaparız.
@Bean
public LocalValidatorFactoryBean validator() {
  LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
  validator.setProviderClass(HibernateValidator.class);
  validator.afterPropertiesSet();
  return validator;
}
setValidationMessageSource metodu
Şöyle yaparız.
@Override
public Validator getValidator() {
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
    validator.setValidationMessageSource(messageSource());
    return validator;
}

SpringBatch JobExecutionDecider Arayüzü

Giriş
Şu satırı dahil ederiz.
import org.springframework.batch.core.job.flow.FlowExecutionStatus;
import org.springframework.batch.core.job.flow.JobExecutionDecider;
decide metodu
Şöyle yaparız.
public class StepDecider implements JobExecutionDecider {

  @Override
  public FlowExecutionStatus decide(
    org.springframework.batch.core.JobExecution jobExecution,
    org.springframework.batch.core.StepExecution stepExecution) {

    String fileTypeCode = jobExecution.getExecutionContext().getString("FileTypeCode");
    String returnStatus = "";
    ...
    return new FlowExecutionStatus(returnStatus);
  }
}

26 Temmuz 2018 Perşembe

SpringMVC @SessionAttributes Anotasyonu

Giriş
Şu satırı dahil ederiz
import org.springframework.web.bind.annotation.SessionAttributes;
Bir sayfadaki ModelAndView'a eklenen attribute nesnelerinin Session içinde saklanmasını sağlar. Böylece diğer sayfalardan da aynı bilgilere erişilebilir.
Kullanım
Örnek
Şöyle yaparız
@Controller
@SessionAttributes("readonlySettings")
public class MyController {

  @RequestMapping(value = "/firstPage")
  public ModelAndView firstPageSubmit(String valuePage1, String valuePage2, 
                                      ModelMap map) {
    map.addAttribute("readonlySettings",
                   new ReadonlySettings(valuePage1, valuePage2);
    return new ModelAndView("secondPage");
  } 

  @RequestMapping(value = "/secondPage")
  public ModelAndView secondPage(ModelMap map, SessionStatus status, String valuePage2) {
    ReadonlySettings settings = map.getAttribute("readonlySettings");
    doa.save(settings.getValuePage1(), settings.getValuePage2(),valuePage2);
    status.setComplete();
  }
  ...
} 
Örnek
Şöyle yaparız. Burada session'a bir IDBTable nesnesi yerleştiriliyor. Daha sonra POST işleminde bu nesneye @ModelAttribute anotasyonu ile erişilebilir
@Controller
@SessionAttributes("table")
public class TableController {

   @PostMapping({"/table.html")
  protected ModelAndView getTable(HttpServletRequest request,
                                  @RequestParam(value = "tableName") String name)
            throws Exception {
  
    ModelAndView modelAndView = new ModelAndView("...");
    IDbTable table = ...
    modelAndView.addObject("table", table);
    ...
    return modelAndView;
  }

  @PostMapping("/deleteRowData.html")
  @ResponseBody
  public void delete(@ModelAttribute("table") IDbTable table)  {
    ...
  }
}
Örnek
Şöyle yaparız. Burada  @ModelAttribute ile birlikte kullanılıyor ve model yoksa ilk nesne yaratılıyor. Post işleminde yine @ModelAttribute ile todo nesnesi ve liste alınıyor. todo nesnesi form ile geliyor. liste ise @SessionAttribute ile geliyor. Daha sonra view "todos.html" sayfasına yönlendiriliyor. Bu sayfa da yeni model'i döndürüyor.
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import org.springframework.web.servlet.view.RedirectView;

@Controller
@RequestMapping("/sessionattributes")
@SessionAttributes("todos")
public class TodoControllerWithSessionAttributes {

  @PostMapping("/form")
  public RedirectView create(
            @ModelAttribute TodoItem todo, 
            @ModelAttribute("todos") TodoList todos, 
            RedirectAttributes attributes) {
    ...
    todos.add(todo);
    attributes.addFlashAttribute("todos", todos);
    return new RedirectView("/sessionattributes/todos.html");
  }

  @ModelAttribute("todos")
  public TodoList todos() {
    return new TodoList();
  }

  @GetMapping("/todos.html")
  public String list(
            Model model, 
            @ModelAttribute("todos") TodoList todos) {
    model.addAttribute("todos", todos);
    return "sessionattributestodos";
  }
}
Örnek
Şöyle yaparız.
@SessionAttributes("email")
public class HomeController {
  ...
}