这只是一个为什么会发生奇怪的事情的问题。
我犯了一个错误,应该使用“cssClass”,但输入了“class”。但是,“class”并未定义为 textarea 标记的属性,因此我希望行为与 cssClass 值相同(未定义的属性应按原样呈现,它确实呈现该属性,但具有奇怪的值和该值似乎不可更改。我提供给它的任何值都将被忽略并默认为支持标签的类)。
例如,如果我定义了一个“turkey”值,我希望在 html 中呈现一个 turkey 值,正如我们在以下示例中看到的那样。
这是我在 JSP 上使用的:
<s:textarea turkey="" class="" name="qualLine.description" value="%{description}"/>
这是渲染的内容:
<textarea name="qualLine.description" cols="" rows="" id="cows" class="class java.util.HashMap" turkey="">test</textarea>
我的问题不是我应该做什么,因为我应该使用 cssClass 而不是 class,我的问题是:这是预期的,为什么?
最佳答案
也许它与正在使用的 Freemarker TemplateModel 有关?
在 dynamic-attributes.ftl
,它来自 textarea.ftl
要解析动态属性,首先使用 StrutsUtil.translateVariables
对 ValueStack 评估属性值。实例,它只使用对 TestParseUtil.translateVariables
的静态调用.但是当它不计算任何东西(null 或 void)时,它就会恢复到属性名称 - 类。
这个值,“class”,然后被评估为一个 Freemarker 表达式 - ${class}
- 在动态属性.ftl 中。
StrutsUtil 被放置在来自 FreemarkerManager
的 Freemarker 模板模型中。调用 ContextUtil
检索 Struts2 对象的映射以放置到模板模型中。放置在 TemplateModel 中的这个映射是一个 HashMap(也许是罪魁祸首映射?)。
所以,这显然不是一个完整的答案,所以我不希望“答案”被接受,但在评论中放置太多了,它可能有助于阐明一些问题。如果我这周晚些时候有时间,我可能会拉下 Struts2 源并使用它来找到真正的答案。但更有可能的是,我不会花时间!
不过,这个问题肯定很有趣。
关于Struts2 UI textarea标签添加 "class"属性用 "class java.util.HashMap"值填充它自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12209111/