Java 在方法之间丢失modelattribute

Java 在方法之间丢失modelattribute,java,forms,spring-mvc,Java,Forms,Spring Mvc,此控制器正常工作 @SessionAttributes("giveForm") @Controller public class GiveFormController { private PersonDao personManager; private KeyCardManager database; private GiveFormValidator validator; public GiveFormController() { } @A

此控制器正常工作

@SessionAttributes("giveForm")
@Controller
public class GiveFormController {

    private PersonDao personManager;
    private KeyCardManager database;
    private GiveFormValidator validator;

    public GiveFormController() {
    }

    @Autowired
    public GiveFormController(KeyCardManager database, PersonDao personManager, GiveFormValidator validator) {

        this.database = database;
        this.validator = validator;
        this.personManager = personManager;
    }

    @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(getValidator());
    }

    @RequestMapping(value = "/give", method = RequestMethod.GET)
    public String give(Model model) {
        GiveForm giveForm = new GiveForm();

        model.addAttribute(giveForm);

        return "give";
    }

    @RequestMapping(method = RequestMethod.POST, params = {"continue"})
    public String go(@ModelAttribute("giveForm") @Valid GiveForm giveForm,
            BindingResult result, Model model, SessionStatus status, HttpServletRequest request) {

        String customer = giveForm.getCustomer();

        if (!customer.isEmpty()) {
            Person person = getPersonManager().findByUid(customer);

            if (person != null) {
                model.addAttribute("customerName", person.getCn());
                model.addAttribute("userIdActive", person.isActive());
            }
        }
        if (result.hasErrors()) {

            return "give";

        } else {

            return "give-confirm";

        }
    }

    @RequestMapping(method = RequestMethod.POST, params = {"cancel"})
    public String cancel(@ModelAttribute("giveForm") GiveForm giveForm, SessionStatus status) {

        status.setComplete();

        return "index";

    }

    @RequestMapping(method = RequestMethod.POST, params = {"ready"})
    public String ready(@ModelAttribute("giveForm") GiveForm giveForm, SessionStatus status,
          HttpServletRequest request, Model model) {
        System.out.println(giveForm.getKeyId());

         status.setComplete();

        model.addAttribute(giveForm);

      if(getDatabase().insertGive(giveForm, request.getRemoteUser())) {
        return "success";
      }
      else {
            return "operationfailed";
      }
    }
但在将modelattribute获取到ready方法时,将返回null:

@SessionAttributes("takeForm")
@Controller
public class XXTakeFormController {

private TakeFormValidator validator;
private KeyCardManager database;
private PersonDao ldap;

   public XXTakeFormController(){

   }
   @Autowired
    public XXTakeFormController(TakeFormValidator validator, KeyCardManager database, PersonDao ldap) {

        this.database = database;
        this.validator = validator;
        this.ldap = ldap;

    }
     @InitBinder
    protected void initBinder(WebDataBinder binder) {
        binder.setValidator(getValidator());
    }




    @RequestMapping(value = "/take", method = RequestMethod.GET)
    public String take(Model model) {

        TakeForm takeForm = new TakeForm();

        model.addAttribute(takeForm);

        return "take";
    }

    @RequestMapping(method = RequestMethod.POST, params = {"continue"})
    public String go(@ModelAttribute("takeForm") @Valid TakeForm takeForm,
            BindingResult result, Model model, SessionStatus status) {

        if (result.hasErrors()) {
        return "take";
        }

        else {
             String criteria = takeForm.getCriteria();
        if (Character.isDigit(criteria.charAt(0))) {
          // criteria is a keyId
          String customer = getDatabase().getHolderOf(criteria);
          takeForm.setCustomer(customer);
          Person person = getLdap().findByUid(customer);
          if (person != null) {
            model.addAttribute("customerName", person.getCn());
          }
          model.addAttribute("customer", customer);
          List keys = new ArrayList();
          keys.add(getDatabase().getKey(criteria));
          model.addAttribute("keys", keys);
        } else {
          // criteria is a userId
          takeForm.setCustomer(criteria);
          model.addAttribute("customer", criteria);
          model.addAttribute("customerName", getLdap().findByUid(criteria).getCn());
          model.addAttribute("keys", getDatabase().getKeysOf(criteria));
        }

    }
            return "take-confirm";

    }

     @RequestMapping(method = RequestMethod.POST, params = {"cancel"})
    public String cancel(@ModelAttribute("takeForm") TakeForm takeForm,
             SessionStatus status) {

        status.setComplete();

        return "index";

    }

    @RequestMapping(method = RequestMethod.POST, params = {"ready"})
    public String ready(@ModelAttribute("takeForm") TakeForm takeForm, SessionStatus
            status, HttpServletRequest request,Model model) {

          status.setComplete();
        model.addAttribute(takeForm);

        System.out.println(takeForm.getKeyId());




        if(getDatabase().executeTake(takeForm.getKeyId(), request.getRemoteUser(), takeForm.getNotes())){

        return "success";
        }
        else {
            return "operationfailed";
        }
    }
这可能是我所忽视的。两个ready方法返回相同的简单视图。有人能帮我借一下眼睛吗?:)

它主要用于将数据设置为控制器中的模型。该数据将通过使用键名作为
${key}

直接在jsp文件中检索 添加到模型中的所有数据都将通过使用
${name}

直接在jsp文件中访问。在ready()方法之前是否执行give()方法?因为它在give()方法中,您可以在其中实例化对象并将其添加到模型中。当您使用@SessionAttribute(“giveForm”)和@ModelAttribute(“giveForm”)时,spring会在会话中查找“giveForm”,如果您没有将“giveForm”对象添加到模型中,它会返回null。必须手动插入对象并将其添加到模型中。
model.addAttribute("key","value");