我不得不修改当前代码以适合Spring MVC。我有

HashMap hashmap = new HashMap();
request.setAttribute("dslrErrors", hashmap);


现在,我修改了将HashMap传递回控制器的方法:

showHTMLResponse方法:

@RequestMapping(value = "/s")
public String showHTMLResponse(@ModelAttribute("dslrs") DSLR dslrs[],
                               @ModelAttribute("dslr") DSLR dslr,
                               @ModelAttribute("dslrErrors") HashMap<?> dslrErrors,
                               @ModelAttribute ("dslrform") DSLRForm dslrForm,
                               @RequestParam("id") String paramId,
                               @RequestParam("action") String paramAction,
                               Model model){
// stuff
...
HashMap<String,Object> dslrHashMap = getDSLRById(paramId);
        dslr = (DSLR) dslrHashMap.get("dslr");
        dslrForm = (DSLRForm)dslrHashMap.get("dslrForm");
        dslrErrors = (HashMap<>)dslrHashMap.get("dslrErrors");
...
}


getDSLRById方法:

    ...
     HashMap<String,Object> map = new HashMap<String, Object>();
     map.put("dslr", dslr);
     map.put("dslrform", dslrForm);
     map.put("dslrErrors", new HashMap());

     return map;
    ...


问题:

这行:
dslrErrors = (HashMap<>)dslrHashMap.get("dslrErrors");

和这个:

@ModelAttribute("dslrErrors") HashMap<?> dslrErrors

如何正确地转换HashMap元素/对象并分配给Model,以便View能够访问它?

最佳答案

由于HashMap接受两个通用参数,因此以下行无法编译(如Tom G在评论中所述)

@ModelAttribute("dslrErrors") HashMap<?> dslrErrors;


简而言之,我期望以下方面:

@ModelAttribute("dslrErrors") HashMap<?,?> dslrErrors;


第一个参数是键,第二个参数是值。

上面的示例在实例化情况下的示例:

HashMap<?,?> myMap = new HashMap<String, String>();


最后要补充的一点是:除非您需要特定于哈希图的方法,否则最好使用该接口作为最佳实践,因为这样可以更轻松地切换实现而无需更改大量代码

Map<?,?> myMap = new HashMap<String, String>();
@ModelAttribute("dslrErrors") Map<?,?> dslrErrors;


至于另一行代码;

dslrErrors = (HashMap<>)dslrHashMap.get("dslrErrors");


我可以想到两种方法(目前没有编辑在我面前进行验证:

    dslrErrors = (HashMap)dslrHashMap.get("dslrErrors"); //no diamond <> operator in the cast
    dslrErrors = (HashMap<Object, Object>)dslrHashMap.get("dslrErrors"); //note how we specify the type in the diamond operator here


我希望这可以帮助你。随时问是否还有任何问题。

有关接口编程的一些资料:
Program to an interface

07-27 23:18