添加“class”属性的Struts2 UI textarea标签用“class java.util.HashMap”值填充它自己

时间:2012-08-31 04:56:25

标签: struts2

这只是一个奇怪发生问题的原因。

我犯了一个错误,应该使用“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而不是类,我的问题是: 这是预期的,为什么?

3 个答案:

答案 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"/>