ModelAttribute在提交弹簧3.0上被覆盖

时间:2012-06-20 14:25:50

标签: spring

在我的控制器中,我有以下功能

@ModelAttribute("ABeanCV")
public AClass getCommand_Class()
{
AClass ABean=new AClass();
ABean.setQuestions(new AutoPopulatingList(ABean.class));
return ABean;
}

@RequestMapping(method = RequestMethod.GET, value="/AFormCV.htm")
protected String showNameForm(@ModelAttribute("ABeanCV") AClass command_Class,ModelMap model)
{
command_Class.getQuestions().get(52).setAns("123456789");
command_Class.getQuestions().get(52).setPrevAns("987654321");
model.addAttribute("Question",as);
command_Class.getQuestions().get(52).setCurrAns("435678543");
model.addAttribute("Question",as);
return "ACV";
}

@RequestMapping(method = RequestMethod.POST, value="/submitQuestionForm.htm")
protected String submitNameForm(@ModelAttribute("ABeanCV") AClass commandClassCV, ModelMap model )
{
System.out.println("Ans wer to q 52 : "+commandClassCV.getQuestions().get(52).getAns());
System.out.println("PREv Ans wer to q 52 : "+commandClassCV.getQuestions().get(52).getPrevAns());
System.out.println("PREv Ans wer to q 52 : "+commandClassCV.getQuestions().get(52).getCurrAns());
model.addAttribute("Question",as);
return "ACV";
}

我的JSP

<form:form method="post" name="classForm" id="classForm" modelAttribute="ABeanCV" commandName="ABeanCV" action="submitQuestionForm.htm">

 here I have only 2 input values " ans and prevAns " but in my showNameForm function I am setting values for  " ans , prevAns and currAns " input values 

当我在表格2中运行项目时,文件显示正常。当我尝试在我的submitNameForm函数中打印3个值时,提交表单后,只打印那些显示在表单上的值,即。 “ans和prevAns”。在showNameForm函数中设置的第三个值“currAns”打印为null。

提交表单时是否覆盖了modelAttribute?我怎样才能获得“currAns”的价值?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

是。当您提交表单时,第一个ModelAttribute将被getCommand_Class()方法覆盖,然后AClass中的Question字段将使用UI上显示的值进行设置。这是因为使用ModelAttribute注释的控制器中的所有方法都会被执行,以便初始化Model对象。

你可以通过

逃脱它
  • 从showNameForm方法中删除getCommand_Class()方法和ModelAttribute AClass。
  • 创建具有所需数据的AClass的新对象,并在ModelMap中设置AClass。
  • 返回ModelAndView对象,以便JSP获取Model对象。