我不得不修改当前代码以适合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