【问题标题】:Put a href link into a Struts2 set tag将 href 链接放入 Struts2 设置标签中
【发布时间】:2020-03-24 23:12:23
【问题描述】:

我想将一个锚标记放入一个 Struts2 变量中,然后我可以在 JSP 中的各个点显示该标记。这样我就可以避免重复用于构建各种形式的 href 标记的复杂 if/then 语句。

我正在使用 Struts 's:set' 标记来执行此操作。

问题是 Struts 将“

如果我将“escape='true'”参数添加到 s:set,它会做同样的事情,只是它会显示 '' 标签的 htmlentities。

如何将有效的锚标记放入 Struts2 变量中,然后将其显示为工作链接?

这就是我正在做的事情:

<s:set name="composerName">

<s:property value="'a href=%{viewRecordURL}>'" escape="false"/>

<s:property value="#composer.title" />

<s:property value="#composer.firstName" />

<s:property value="#composer.lastName" />

<s:property value="'</a>'" escape="false" />

</s:set>

【问题讨论】:

    标签: tags struts2 escaping struts


    【解决方案1】:

    使用s:url 创建一个有效的url,然后在s:a 中使用它来生成链接。

    您可以参考以下链接了解更多详情:

    http://struts.apache.org/2.1.8/docs/a.html

    【讨论】:

    • 没有充分的理由使用&lt;s:a&gt;,除非您将它用于 Ajax 请求。
    【解决方案2】:

    我们可以使用 url 标签来创建如下所述的 URL

    <s:url id="hLink" action="yourStrutsActionName">
       <s:param name="propertyName" value="%{propertyName}" />
    </s:url>
    <td><s:a href="%{hLink}"><s:property value="%{propertyName}"/></s:a></td> 
    

    【讨论】:

    • 属性id 已被弃用,请改用var
    【解决方案3】:

    用这种简单的方法在 Struts2 中设置链接 // 在 href 中添加 Struts2 动作

    <s:a href="forgetPasswordPage.action" >Forget Password</s:a>
    

    【讨论】:

      【解决方案4】:

      这不是你想要的构建方式——你拥有的是两个不同的东西,一个 URL 和那个 URL 的文本字符串。您已有的 URL。链接文本只能使用&lt;s:set&gt;

      如果你真的需要,你可以把它包装成一个基于 JSP 的自定义标签,但我不会打扰。

      【讨论】:

      • 问题是我需要包装这两个部分,1)URL - 这是使用 s:url 在迭代器(未显示)中定义的 - 和 2)s:a 的文本字符串标记到 Struts s:set 变量中,因此它可以在页面中的不同位置使用,而无需重新创建用于创建链接的替代版本的某些逻辑(也为简洁起见也未显示)。但请参阅下面我自己对我的问题的回答。
      • @Ron 那么我可能会考虑尝试&lt;c:set&gt;。我真的不明白你在做什么,而且我还不相信这是一个很好的方法——到目前为止,这在视图中有点逻辑。
      【解决方案5】:

      我会回答我自己的问题。也许其他人有更优雅的解决方案。再一次,我们试图将锚标记和 url 都放入 s:set 变量中。问题有两个:1)让 s:set 将标记字符串视为文字字符串而不是对象(它想从 ActionContext 或某处获取),以及 2)关闭转义,以便锚的字符串文本标记不会转换为 '& lt;' 之类的 htmlentities。

      对于 1,我将 var 设置为 null,但提供了一个默认参数,s:property 始终将其视为文字字符串。

      对于 #2,这只是在正确的地方使用 escape="false" 的问题。

      不幸的是,字符串必须由单独的 s:property 位组成,但你能做什么?

      <s:set name="composerName" >
          <s:property value="" default="<a href=" escape="false"/> 
          <s:property value="" default="'" />
          <s:property value="%{viewRecordURL}" escape="true"/>
          <s:property value="" default="'>" escape="false" />
          <s:property value="#composer.title" />
          <s:property value="#composer.firstName" />
          <s:property value="#composer.lastName" />
          <s:property value="" default="</a>" escape="false"/>
      </s:set>
      

      我还没有在#composer 部分使用 UTF-8 字符或可能有问题的字符(如“&”、撇号或单引号)对其进行测试。

      【讨论】:

      • 还是。视图中的工作过多;我不明白这个用例。
      • 发生的事情是这个 JSP 正在使用 Springframework 中的 authz:authorize 标签,以及 Struts2。要求 Struts 做的很多事情都依赖于基于 Spring 的条件语句。所以这个 JSP 最终成为了两者之间的中介。定义了一个 Struts bean,我想我可以把一些丑陋的东西扔到那里,把它从 JSP 中取出。
      • 再想一想,有很多东西使用来自外部资源文件的字符串、来自 Action 类的值和 Spring。即使我在调用某个实用程序 bean 以构建链接(并摆脱丑陋的 Struts 代码)时将所有这些整合在一起,与整体相比,代码减少量也可以忽略不计。
      • 喜欢所有的,除了网址;我只是想不出任何可能的标签/框架/任何会迫使您生成这样的链接的交互。不代表不可能,但是……我肯定看不到。
      • 不在 that sn-p 中没有。
      【解决方案6】:

      我遇到了同样的问题,我刚刚解决了如下:

      在主 bean 中,我有以下带有 Setters 和 Getters 的变量:

      private int ReqNo;
      private String hyperLinkToPage;
      

      在 JSP 页面中,我的 TD 如下:

          <td class="displayValue" style="width: 10%;"><s:a href="%{hyperLinkToPage}"><s:property value="%{ReqNo}"/></s:a></td> 
      

      我希望它会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-07
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多