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 {
  ...
}

Hiç yorum yok:

Yorum Gönder