这只是一个奇怪发生问题的原因。
我犯了一个错误,应该使用“cssClass”,而是输入“class”。但是“class”没有定义为textarea标签的属性,所以我希望行为与cssClass值相同(非定义属性应该按原样呈现,并且它确实呈现属性但具有奇怪的值,该值似乎不可更改。我提供给它的任何值都被忽略,默认为支持标记的类。
例如,如果我定义一个“火鸡”值,我希望在html中呈现一个火鸡值,正如我们在下面的例子中看到的那样。
这是我在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而不是类,我的问题是: 这是预期的,为什么?
答案 0 :(得分:2)
也许它与正在使用的Freemarker TemplateModel有关?
在dynamic-attributes.ftl
中包含以解析动态属性的textarea.ftl
中,首先使用StrutsUtil.translateVariables
实例对ValueStack计算属性值,该实例仅使用静态致电TestParseUtil.translateVariables
。但是当它没有评估任何东西(null或void)时,它会恢复到属性name - class。
然后,在dynamic-attributes.ftl中将此值“class”评估为Freemarker表达式 - ${class}
。
StrutsUtil放置在FreemarkerManager
的Freemarker模板模型中,ContextUtil
调用{{1}}来检索Struts2对象的地图以放置到模板模型中。放置在TemplateModel中的这个地图是一个HashMap(也许是罪魁祸首地图?)。
所以,这显然不是一个完整的答案,所以我不希望接受“答案”,但是在评论中放置太多,这可能有助于揭开一些亮点。如果我在本周晚些时候有时间,我可以下载Struts2源代码并使用它来找到真正的答案。但更有可能的是,我不会花时间!
有趣的问题肯定是。
答案 1 :(得分:0)
这是因为每个Java对象都有一个方法getClass()
,它返回一个对象的运行时类,在你的情况java.util.HashMap
中。这样,虽然没有为textearea标记定义class
,但它是为TextareaTag类定义的,它是实现textarea行为的类。这将发生在jsps中的每个标记中,因为它们最终都是用Java类实现的。
这就是为什么(我猜)Struts团队使用cssClass
仅仅使用class
。{/ p>
答案 2 :(得分:0)
使用
的CssClass = “输入-SM”
而不是
类= “输入-SM”
当你使用像
这样的struts输入时<s:textfield cssClass=input-sm id="a" key="" name="" placeholder="Required"/>