【发布时间】:2016-05-20 05:56:57
【问题描述】:
我想知道是否有办法更新现有的@ModelAttribute。如果可能,不保留会话中的值
假设我有一个 bean:
class TravelDetails{
private String origin;
private String destination;
private String travelerName;
private String travelerAge;
// Getters & Seters
}
这是我的控制器:
@Controller
class TravelerController{
@RequestMapping(value="/searchDetails", method=RequestMethod.GET)
public ModelAndView getSearchDetails(@RequestParam("origin") String origin,
@RequestParam("destination") String destination,ModelMap modelMap){
TravelDetails travelDetails = new TravelDetails();
travelDetails.setOrigin(origin);
travelDetails.setDestination(destination);
modelMap.addAttribute("travelDetails",travelDetails);
return new ModelAndView("get_traveler_details");
}
@RequestMapping(value="/addTravelerDetails", method=RequestMethod.POST)
public ModelAndView addTravelerDetails(
@ModelAttribute("travelDetails") TravelDetails travelDetails,
ModelMap modelMap){
System.out.println(travelDetails.getOrigin);
System.out.println(travelDetails.getDestination);
System.out.println(travelDetails.getTravelerName);
System.out.println(travelDetails.getTravelerAge);
return new ModelAndView("get_traveler_details");
}
}
第二个控制器方法得到的post表单只包含旅行者的姓名和年龄,而出发地和目的地需要从第一个控制器中设置的模型属性中检索。
我不想在 Post 表单中显式设置隐藏字段。
假设我的 HTML 是:
<form:form modelAttribute="travelDetails" action="/addTravelerDetails" method="POST">
<form:input type="text" path="travelerName"/>
<form:input type="text" path="travelerAge"/>
</form:form>
注意:我是在 StackOverflow 的文本区域而不是在某些 IDE 上编写代码,所以如果代码中有一些蹩脚的拼写或语法错误,请忽略。
【问题讨论】:
-
您可能希望将信息保留在会话中
-
不,我不想。如果存在,会更喜欢另一种方式。
-
您为什么不想将原始目的地发回?安全原因?
-
@sidgate 其实这只是一个例子。我的实际 bean 有 50 多个属性。我不喜欢通过网络再次发送相同的值 + 这会增加 JSP。
-
@sidgate 有什么解决办法吗?请标记您认识的可以回答的人。谢谢
标签: java spring model-view-controller modelattribute