如何转义表单标签路径属性值?

时间:2019-07-15 08:27:08

标签: spring spring-mvc jstl spring-form

我正在研究由Spring MVC和JSTL驱动的动态表单生成器。生成器生成的表单包括简单的用户输入窗口小部件模板,这些模板可生成HTML文档/输入并使用HTTP表单数据。这里没什么特别的。现在,我需要实现一个动态窗口小部件以填充动态键/值条目,并且发现form:input标记本质上是我需要绑定Map.Entry<String, String>的标记。但是,在某些情况下,我不能使它起作用,因为输入键可能包含肯定会中断path属性解析的特殊字符。假设存在一个带有customProperties字段的表单,该表单被声明为字符串到字符串的映射。现在,在JSP中,我可以如下生成pathpath="customProperties['${entry.key}']"具有简单的字符串插值。除非用户提供了一个名称,该名称的名称会破坏路径语法,否则这会很好地工作,例如将]foo[扩展为path="customProperties[']foo[']",这会导致表单生成器由于路径语法损坏而无法正确生成表单。这绝对是生成动态path值的一种肮脏方式,但是我找不到任何文档说明如何正确转义路径文字/组件。我假设,路径组件应遵循bean的命名约定。深入研究路径评估后,我发现方法PropertyAccessorUtils.canonicalPropertyName以原始方式“标准化”路径值,并且它似乎不支持任何转义。 Javadoc只是说:

  

从地图键中删除周围的引号:
  map['key'] -> map[key]
  map["key"] -> map[key]

嗯,这听起来像个坏消息。我正在考虑以下两种解决方法:

  • 让Spring框架评估支持转义字符的动态路径本身,以支持任意用户输入的名称。可能使用自定义数据绑定器,但这听起来并不简单,但是我看不到任何其他不静态调用canonicalPropertyName方法的方法。 (更改属性路径归一化方法到底会如何影响整个表达式的计算?)
  • 评估路径名并将结果分配给原始HTML input标签name属性,但这听起来并不像是一个健壮而实际的解决方法:确切的规则是什么编写这样的名称并将这些名称从客户端转换回去,以便Spring框架不会拒绝它们?简而言之,如果Spring仅支持非常有限的路径语法,那么在接受用户表单数据时这将无济于事。还是因为任意地图都可以绑定到表单模型,我在这里错了吗?

我的问题基本上是:是否可以在path属性中支持不会破坏路径语法的任意属性名称?

0 个答案:

没有答案