将href链接放入Struts2 set标记中

问题描述 投票:0回答:5

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

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

问题是Struts将'<'字符转换为htmlentities,当页面显示时,我看到显示的是实际的“a href = someURL”标签,而不是工作链接。

如果我将“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
5个回答
1
投票

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

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

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


0
投票

这不是你想要构建它的方式 - 你拥有的是两个不同的东西,一个URL,以及该URL的文本字符串。您已有的网址。仅使用<s:set>作为链接文本。

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


0
投票

我会回答我自己的问题。也许其他人有一个更优雅的解决方案。再一次,我们试图将一个锚标记和一个url都放入一个s:set变量中。问题是两个:1)获取s:设置将标记字符串视为文字字符串而不是Object(它想要从ActionContext或某处获取),以及2)关闭转义以使锚点的字符串文本tag不会转换为像'&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>

我还没有使用UTF-8字符或#composer部分中的'&',撇号或单引号等可能有问题的字符进行测试。


0
投票

我们可以使用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> 

0
投票

这样就可以轻松地在Struts2中设置链接//在href中添加Struts2动作

<s:a href="forgetPasswordPage.action" >Forget Password</s:a>
© www.soinside.com 2019 - 2024. All rights reserved.