我有一个Java HashMap<String,String>
,它通过Spring的ModelAndView
提供给JSP页面(itemTypesByKey
),并且包含一个包含键列表的单独结构。 (这些键可能导致或不导致有效的查找。)我枚举这些键,并从地图中获取值。使用包含单引号的字符串键的EL映射查找
Map<String, String> itemTypes = new HashMap<>();
itemTypes.put("NormalValue", "INGREDIENT");
itemTypes.put("Apostro'Value", "INGREDIENT");
ModelAndView mav = ...
mav.addObject("itemTypesByKey", itemTypes);
问题我看到的是,如果我的钥匙包含撇号,查找失败。
我的代码(用于调试目的):
Key Name: ${currentKeyName}
Not Empty: ${not empty itemTypesByKey[currentKeyName]}
Type: ${itemTypesByKey[currentKeyName]}
All Suite Types: ${itemTypesByKey}
结束了打印,支持两个独立的按键:
Key Name: NormalValue
Not Empty: true
Type: INGREDIENT
All Suite Types: {NormalValue=INGREDIENT, Apostro'Value=INGREDIENT}
Key Name: Apostro'Value
Not Empty: false
Type:
All Suite Types: {NormalValue=INGREDIENT, Apostro'Value=INGREDIENT}
时,他们用来查找一个我明白逃避撇文字值,但为什么如果我的密钥包含撇号,这会失败?无论我的密钥的值是否包含特殊字符,如何安全地在我的映射中执行查找?我使用的是Spring 3.1.4版本(mvc,表达式等),并且这个问题不会影响包含感叹号的关键字,或者其他我认为可以测试的特殊字符。
由于APOSTROPH将转换成thier代码(')。与引号相同的问题=(。 – reporter
不应该在任何内容被打印到页面之前发生内部查找? –
实际上是的,但'实际上'实际上不是一个字^^ – reporter