简体   繁体   中英

how to use attribute value from one method to another method

i hav a home controller within which i hav 2 methods one is

    @RequestMapping(value = "/mypage.te", method = RequestMethod.GET)
    public String mypage1(Locale locale, Model model){

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();
        String name = auth.getName(); //get logged in username 
        model.addAttribute("username", name);       
        model.addAttribute("customGroup",grpDao.fetchCustomGroup());        
        model.addAttribute("serverTime", formattedDate);
        model.addAttribute("username", name);

        return "mypage";
}

here in this method actually i call grpDao.fetchCustomGroup() method from a Dao class which performs a native query and fetches data and returns and it is saved in customGroup .

now the same fetchcustomGroup() method is to be used in another method ie

@RequestMapping(value = "/manageGrps.te", method = RequestMethod.GET)
public String man_grp_connections(@RequestParam("id") Integer groupId,@RequestParam("name") String groupName, Model model) {
    Authentication auth = SecurityContextHolder.getContext().getAuthentication();
    String name = auth.getName();
    System.out.println("I am in the fetchCustomGroup controller");  
    int profileid=grpDao.getProfileId(name);        
    //model.addAttribute("customGroup",grpDao.fetchCustomGroup());
    model.addAttribute("memberList",grpDao.fetchGroupMembers(groupId,profileid));
    model.addAttribute("groupid",groupId);
    model.addAttribute("profileid",profileid);

    model.addAttribute("groupName",groupName);
    System.out.println("groupid="+groupId);
    System.out.println("groupName="+groupName);
    return "manageGrps";
}

so instead of calling the fetchCustomGroup() in both the methods i just want to call in only one method and use the result in both the methods in the home controller.

so how can i use customGroup in another method to use the result of the fetchCustomGroup()

I think that what you want is to avoid executing the query twice. This can be done in different ways. The easiest way would be to assign the response to a variable in your controller and then use a getter instead of the dao. Controllers are singleton by default. Something like :

private Foo customGroup;

private synchronized Foo getCustomGroup() {
    if(customGroup == null) {
        customGroup = grpDao.fetchCustomGroup();
    } 
    return customGroup;
}

And then use getCustomGroup() instead of grpDao.fetchCustomGroup()

I don't know what you are using for your persistence but using cache would also be a good idea to avoid executing the query twice.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM