[英]Dynamically add attribute to struts2 UI tag
有没有办法动态地将属性添加到struts 2,标记UI标记,如文本字段?
原因是我想将一个readOnly
表单字段属性添加到<s:textfield/>
,具体取决于操作的方法结果。 我不能使用readOnly="%{isReadOnly()}"
因为一旦定义了属性,表单元素就是只读的,无论它具有什么值。 将每个表单字段包装到<s:if/>
标记中非常麻烦,导致大量代码重复。
出于互操作性原因以及不依赖于浏览器的脚本设置,我还想避免使用JavaScript。
如果问题是使用内置的struts2功能,那么一个简单的选择是使用freemarker渲染视图,它可以轻松支持动态添加属性。
如果您正在使用约定,那么您只需创建一个带有“.ftl”扩展名的文件就非常简单,如果您使用的是xml,那么使用freemarker结果类型也很容易(请参阅此处获取更多说明):
<action name="test" class="package.Test">
<result name="success" type="freemarker">/WEB-INF/content/testView.ftl</result>
</action>
以下是使用地图动态添加属性的示例视图(示例也取自喜欢的页面):
<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>
dynamicAttributes在所有JSP UI标记中都非常有用,但是它目前还没有实现。
注意 :上述链接中有一个错误/遗漏。 它告诉您添加以下行,这会导致我的环境出错(只需要该行)。
<#assign s=JspTaglibs["/WEB-INF/struts.tld"] />
也就是说,文件中的这一行都是自己的 ,足以渲染文本元素,不需要显式标记库声明!
<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>
使用freemarker优于普通JSP有许多优点,因此花点时间探索语法并将其用于这种情况可能会在以后证明是有用的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.