【问题标题】:How to override <struts:text name="..."/> (Struts 2 Text jsp tag) to print out the name attribute in an HTML comment?如何覆盖 <struts:text name="..."/> (Struts 2 Text jsp 标签)以打印出 HTML 注释中的 name 属性?
【发布时间】:2011-09-12 13:00:18
【问题描述】:

当您使用&lt;struts:text name="..."/&gt; Struts 2 Text jsp 标记时,您会从页面中的 .properties 文件中获取文本。

例如,如果 .properties 文件包含

foo.bar = This is the text.

jsp标签&lt;struts:text name="foo.bar"/&gt;会输出

This is the text.

现在我希望 webapp 中的所有 &lt;struts:text name="..."&gt; 实例也可以在 HTML 注释中输出 name 属性,如下所示:

<!-- foo.bar -->This is the text.

我尝试创建自己的 jsp 标记文件(用来代替 &lt;struts:text&gt;),其中包含

<%@attribute name="name" required="true"%>

<!-- ${name} --><struts:text name="${name}"/>

但它不起作用,因为 struts:text 标记的 name 属性的 &lt;rtexprvalue&gt; 设置为 false

有什么想法可以实现吗?

【问题讨论】:

  • foo.bar = &lt;!-- foo.bar --&gt;This is the text.?
  • @Ischin: foo.bar 只是一个例子。我希望它对 .properties 文件中的所有数百个文本都一样。

标签: java templates text struts2 jsp-tags


【解决方案1】:
# PROPERTIES
copyright.year=2011

(B) : 覆盖默认主题 (is acceptable)

label.ftl

添加以下代码&lt;!-- ${parameters.name?html} --&gt;

<!-- ${parameters.name?html} -->

<label<#rt/>
...
</label>

.jsp

<s:label key="copyright.year" />

HTML 输出:

2011

HTML 源代码:

<!-- copyright.year -->
<label id="form_name_copyright_year">2011</label>

或(不推荐)

label.ftl只有 4 行代码

<#if parameters.nameValue??>
<!-- ${parameters.name?html} --><#rt/>
<@s.property value="parameters.nameValue"/><#t/>
</#if>

HTML 源代码:

<!-- copyright.year -->2011

  (A)  

/**
 * Overridden/replacement for {@link ActionSupport}.
 */
public class MyActionSupport extends ActionSupport {

    public String text(String fieldName) {
        return "<!-- " + fieldName + " --> " + getText(fieldName);
    }
}


public class MyAction extends MyActionSupport {

}

.jsp

<s:property value="text('copyright.year')" escapeHtml="false" />

HTML 输出:

2011

HTML 源代码:

<!-- copyright.year --> 2011

【讨论】:

  • 谢谢,这应该可行,尽管我不太热衷于在所有标签上复制 text('...')escapeHtml="false"。我真的很想有一个格式为 &lt;x:text name="..."/&gt; 的标签
  • @Ischin:很遗憾,&lt;struts:text/&gt; 不是 UI 标签,因此它没有模板,也不能主题化。
  • @Christoffer 是的。请参阅我的更新答案 (B)。您可以覆盖其他不重要的标签,例如labeldiv、...
  • @Ischin:再次感谢!为什么不推荐第二个?看起来很接近我想要的。
  • @Christoffer 其他一些属性(在label.ftl 中)会失效,但如果&lt;s:label /&gt; 从不用于其他目的也没什么大不了的。
猜你喜欢
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多