是否有一种方法可以动态地将属性添加到struts 2,标记UI标记,如textfield?
原因是我想要向一个readOnly表单字段属性添加一个<s:textfield/>,这取决于操作的方法结果。我不能使用readOnly="%{isReadOnly()}",因为一旦定义了属性,表单元素就是只读的,不管它有什么值。将每个表单字段封装到<s:if/>标记中非常麻烦,并会导致大量的代码重复。
出于互操作性和不依赖浏览器脚本设置的原因,我还想避免使用JavaScript。
发布于 2012-09-10 00:15:46
如果问题是要使用内置的struts2功能,那么一个简单的选项是使用freemarker呈现视图,这很容易支持动态添加属性。
如果您使用的是约定,那么您只需创建一个扩展名为".ftl“的文件就非常简单了,如果您使用的是xml,也非常容易使用共济会的结果类型(更详细的描述请参见这里 ):
<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标记中都非常有用,但是遗憾的是,它目前还没有实现。
注意事项:在上面的链接中有一个错误/遗漏。它告诉您添加下面的行,这将在我的环境中造成一个错误(简单地说,不需要该行)。
<#assign s=JspTaglibs["/WEB-INF/struts.tld"] /> 也就是说,文件中的这一行本身就足以呈现文本元素,不需要显式标记库声明!
<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>与普通JSP相比,使用freemarker有许多优点,因此花点时间研究一下语法,并在这一种情况下使用它,稍后可能会证明是有用的。
https://stackoverflow.com/questions/12341719
复制相似问题