gpt4 book ai didi

java - 处理重叠的@SessionAttributes 名称?

转载 作者:行者123 更新时间:2023-11-30 12:08:03 25 4
gpt4 key购买 nike

我怎样才能使 @SessionAttributes 限定在它们各自的 Controller 中,或者在过早地在 Controller 之间切换工作流时清理 @SessionAttributes

示例:

用户进入网页编辑字典并进入DictionaryController.java,它创建一个DictionaryForm.java对象并将其存储在@SessionAttributes 在“表格”下

通常,字典条目在 GET 请求中获取,然后在 POST 上更新,并在成功时调用 status.setComplete()

但是,如果用户发出 GET 请求,然后点击另一个页面,例如 OrganizationController.java,第二个 Controller 似乎会尝试重用“表单”@SessionAttribute 来自另一个 Controller 的对象,甚至在它到达 getOrganization() 方法之前就会失败。 (由于我的 eclipse 控制台没有输出任何异常,所以它究竟是如何失败的性质尚未确定,但我怀疑这是因为表单类型不匹配)

@SessionAttributes("form")
public class DictionaryController {

@ModelAttribute("form")
public DictionaryForm initForm() {
return new DictionaryForm();
}

@RequestMapping(value="/Dictionary" method=RequestMethod.GET)
public String getDictionary(
@ModelAttribute("form") DictionaryForm form) {
...
return "dictionaryView";
}

@RequestMapping(value="/Dictionary" method=RequestMethod.POST)
public String updateDictionary(
@ModelAttribute("form") DictionaryForm form,
SessionStatus status) {
...
status.setComplete();
return "successView";
}

}
@Controller
@SessionAttributes("form")
public class OrganizationController{

@ModelAttribute("form")
public OrganizationForm initForm() {
return new OrganizationForm();
}

@RequestMapping(value="/Organization" method=RequestMethod.GET)
public String getOrganization(
@ModelAttribute("form") OrganizationForm form) {
...
return "orgView";
}

@RequestMapping(value="/Organization" method=RequestMethod.POST)
public String updateOrganization(
@ModelAttribute("form") OrganizationForm form,
SessionStatus status) {
...
status.setComplete();
return "successView";
}
}

最佳答案

我最终使用的解决方案是拥有一个所有表单类型都继承自的 BaseForm 对象类型。然后在 GET 请求的请求映射方法中,我将使用 @ModelAttribute("form") BaseForm form 并手动检查方法主体中的表单类型,如果不匹配转换它并在 session 中恢复它。 (如果您将它附加到请求的模型对象,则可能不需要在 session 中替换它)

即。

@RequestMapping(value="/Organization" method=RequestMethod.GET)
public String getOrganization(HttpServletRequest request,
@ModelAttribute("form") BaseForm form) {
if (form.getClass() != OrganizationForm.class) {
form = new OrganizationForm();
request.getSession().setAttribute("form", form);
}
...
return "orgView";
}

关于java - 处理重叠的@SessionAttributes 名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54489647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com