【问题标题】:Spring Model Argument is not enriched by controller mapping控制器映射不丰富 Spring 模型参数
【发布时间】:2014-04-02 18:01:36
【问题描述】:

在 Spring Controller 方法中,我想从 jsp 文件中发布的内容中丰富模型元素。

这里是代码功能的开始。 每次输入函数时,模型都是无效的。有什么提示吗?

@RequestMapping(value = Uris.IMPORTADDRBOOK)
public String mainImportController(HttpServletRequest request, HttpServletResponse response, Model model,
        @RequestParam(value = "chosenSP", required = false) String bookToImportName,
        @RequestParam(value = "catMode", required = false) String catMode,
        @RequestParam(value = "transition", required = false) ImportControllerTransitions transition) {

    logger.debug(String.format("controller import. Etat entrée : %s, transition demandée : %s, chosen SP : %s, catmode : %s",
            model.asMap().get("importState"), transition, bookToImportName, catMode));


    logger.debug(String.format("Modele Entree  Import Controller:"));
    for (String attribute : model.asMap().keySet())
        logger.debug(String.format("%s : %s", attribute, model.asMap().get(attribute)));


    if (!model.containsAttribute("importState"))
        model.addAttribute("importState", ImportControllerState.INITIAL);

    switch ((ImportControllerState) model.asMap().get("importState")) {
    case INITIAL:
        if (transition == ImportControllerTransitions.CONNECTORCHOICE) {
            model.addAttribute("importState", ImportControllerState.CONNECTOR);
            if (bookToImportName != null)
                model.addAttribute("chosenSP", DynAddrBookTypes.valueOf(bookToImportName));
        }
        break;

    default:
        break;

    }

    logger.debug(String.format("Modele sortie Import Controller:"));
    for (String attribute : model.asMap().keySet())
        logger.debug(String.format("%s : %s", attribute, model.asMap().get(attribute)));
    return Uris.IMPORTADDRBOOK;
}

JSP 可以正确读取模型属性,但是当我回到控制器时,模型又是空的... 提前致谢,

【问题讨论】:

  • 回到控制器是什么意思?
  • 在 JSP 中,有几个表单都向同一个 URL 进行 POST,该 URL 是“@requestmapped”到控制器函数,生成对同一个控制器函数的连续调用。
  • 你的意思是你需要session attributes的行为吗?
  • 根据 Bart 的评论并查看 stackoverflow.com/questions/5834558/… 说 MVC Spring 是无状态的,我想如果我不能将我需要的内容作为会话属性保存在会话中,我的东西就无法工作。 ..
  • 巴特,我绝对需要会话属性。感谢您的帮助。

标签: spring-mvc


【解决方案1】:

跟进上面的Bart's cmets 并在this related SO question 中从Donal Boyle 回答,@SessionAttributes 是保持模型对象值的正确方法,尽管事实上 Spring MVC 服务器端是无状态的。

只要类声明包含@SessionAttributes 注释,我的问题中的代码就可以正常工作,如下所示:

@Controller
@SessionAttributes({ "importState", "chosenSP", "catMode" })
public class ImportContactController {

【讨论】:

  • 我想澄清一点。 Spring MVC 本身并不是无状态的。 HTTP 是无状态的。.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-25
  • 2013-02-08
  • 1970-01-01
  • 2016-02-08
  • 2014-10-22
  • 2011-08-29
相关资源
最近更新 更多