【问题标题】:JSP tag which shortens iffing null attributes缩短 iffing 空属性的 JSP 标记
【发布时间】:2012-04-04 19:01:22
【问题描述】:

我正在寻找一种更简洁的方式来编写这样的jsp sn-p:

<a href="${model.link}" class="button"<c:if test="${not empty model.title"> title="${model.title}"</c:if>>

这段代码很难阅读。问题是,不应该生成空的title=""标签属性,所以这部分必须是iffed。

我发现&lt;c:out&gt; 标签具有默认值属性,但是:

<c:out value='title="${model.title}"' default=""/>

不能正常工作,因为值永远不会为空(因为它是安全的字符串连接)。

有没有什么方法可以将这些简单的东西写得更短、更简洁、更好?

【问题讨论】:

    标签: jsp if-statement jsp-tags


    【解决方案1】:
    <c:if test = "${not empty model.title}">
    <c:set var = "title" value = "title = '${model.title}'"/>
    </c:if>
    <a href="${model.link}" class="button" ${title}>
    

    你也可以做一个自定义标签库,所以你最终会得到这样的东西:

    <my:link class = "button" model = "${model}">...</my:link>
    

    由于 servlet 规范,您可以将 taglib 实现为 jsp-sn-p,或者您可以一直使用 Java。

    【讨论】:

    • 为你的努力点赞,但这一点也不干净。
    • 视情况而定,我个人不喜欢在其他标签中看到
    【解决方案2】:

    另一种方法是这样的;

    <a href="${model.link}" class="button"<% if (model.title != null) { %> title="${model.title}"<% } %>>
    

    比你的第一个例子短一点,但还是有点太杂乱。

    但是请记住,您的标题仍然需要进行清理,因为它封装在一个 html 标记中。

    StringEscapeUtils.escapeHtml(mode.title)
    

    【讨论】:

    • 为你的努力点赞,但无论如何这并不干净。感谢您的转义提示,但我实际上是在内部类实现中这样做的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 2015-06-02
    • 2021-10-17
    • 2010-09-20
    • 2012-06-26
    • 2014-06-23
    相关资源
    最近更新 更多