首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向struts2 UI标记动态添加属性

向struts2 UI标记动态添加属性
EN

Stack Overflow用户
提问于 2012-09-09 18:27:50
回答 1查看 3.1K关注 0票数 3

是否有一种方法可以动态地将属性添加到struts 2,标记UI标记,如textfield?

原因是我想要向一个readOnly表单字段属性添加一个<s:textfield/>,这取决于操作的方法结果。我不能使用readOnly="%{isReadOnly()}",因为一旦定义了属性,表单元素就是只读的,不管它有什么值。将每个表单字段封装到<s:if/>标记中非常麻烦,并会导致大量的代码重复。

出于互操作性和不依赖浏览器脚本设置的原因,我还想避免使用JavaScript。

EN

回答 1

Stack Overflow用户

发布于 2012-09-10 00:15:46

如果问题是要使用内置的struts2功能,那么一个简单的选项是使用freemarker呈现视图,这很容易支持动态添加属性。

如果您使用的是约定,那么您只需创建一个扩展名为".ftl“的文件就非常简单了,如果您使用的是xml,也非常容易使用共济会的结果类型(更详细的描述请参见这里 ):

代码语言:javascript
运行
复制
<action name="test" class="package.Test">
  <result name="success" type="freemarker">/WEB-INF/content/testView.ftl</result>
</action>

下面是使用地图动态添加属性的示例视图(示例也取自喜欢的页面):

代码语言:javascript
运行
复制
<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>

dynamicAttributes在所有JSP标记中都非常有用,但是遗憾的是,它目前还没有实现。

注意事项:在上面的链接中有一个错误/遗漏。它告诉您添加下面的行,这将在我的环境中造成一个错误(简单地说,不需要该行)。

代码语言:javascript
运行
复制
<#assign s=JspTaglibs["/WEB-INF/struts.tld"] /> 

也就是说,文件中的这一行本身就足以呈现文本元素,不需要显式标记库声明!

代码语言:javascript
运行
复制
<@s.textfield name="test" dynamicAttributes={"placeholder":"input","foo":"bar"}/>

与普通JSP相比,使用freemarker有许多优点,因此花点时间研究一下语法,并在这一种情况下使用它,稍后可能会证明是有用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12341719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档