控制器映射不会丰富Spring Model Argument

时间:2014-04-02 18:01:37

标签: spring-mvc

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

这是代码功能的开始。 每次输入函数时,模型都是无效的。有关于此的任何暗示吗?

@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可以正确读取模型属性但是当我回到控制器时,模型再次为空...... 提前谢谢,

1 个答案:

答案 0 :(得分:0)

对上面的Bart's条评论进行跟进,并在Donal Boylethis related SO question回答,@SessionAttributes是保留模型对象值的正确方法,尽管Spring MVC服务器端是无状态的。

我的问题中的代码工作得很好,前提是类声明包含@SessionAttributes注释,如下所示:

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