Tags 将href链接放入Struts2 set标记中

Tags 将href链接放入Struts2 set标记中,tags,struts2,escaping,struts,Tags,Struts2,Escaping,Struts,我想在Struts2变量中放入一个锚标记,然后在JSP中的各个点上显示该变量。这样可以避免重复用于构建各种形式的href标记的复杂if/then语句 我正在使用Struts的s:set标签来实现这一点 问题是Struts转换了“”escape=“false”/> 这不是您想要构建的方式--您拥有的是两个不同的东西,一个URL和该URL的文本字符串。您已经拥有的URL。仅对链接文本使用 如果您真的需要,您可以将其包装到基于JSP的自定义标记中,但我不想麻烦。这不是您想要构建它的方式--您拥有的是两

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

我正在使用Struts的s:set标签来实现这一点

问题是Struts转换了“”escape=“false”/>
这不是您想要构建的方式--您拥有的是两个不同的东西,一个URL和该URL的文本字符串。您已经拥有的URL。仅对链接文本使用


如果您真的需要,您可以将其包装到基于JSP的自定义标记中,但我不想麻烦。

这不是您想要构建它的方式--您拥有的是两个不同的东西,一个URL和该URL的文本字符串。您已经拥有的URL。只对链接文本使用


如果您真的需要,您可以将其包装到基于JSP的自定义标记中,但我不想麻烦。

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

有关更多详细信息,请参阅下面的链接:


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

有关更多详细信息,请参阅下面的链接:


我将回答我自己的问题。也许其他人有一个更优雅的解决方案。我们再次尝试将锚定标记和url都放入s:set变量中。问题有两个:1)将s:set作为文本字符串处理,而不是对象(它想从ActionContext或其他地方获取),和2)关闭转义,以便锚定标记的字符串文本不会转换为类似“<;”的HTML属性

对于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部分中的单引号)对其进行测试。

我将回答我自己的问题。也许其他人有更优雅的解决方案。我们再次尝试将锚定标记和url都放入s:set变量中。问题有两个:1)getting s:设置为将标记字符串视为文字字符串而不是对象(它希望从ActionContext或其他地方获取),2)关闭转义,以便锚定标记的字符串文本不会转换为类似“<;”的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部分中的单引号)对其进行测试。

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

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

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

<s:a href="forgetPasswordPage.action" >Forget Password</s:a>
忘记密码

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

<s:a href="forgetPasswordPage.action" >Forget Password</s:a>
忘记密码

我也遇到了同样的问题,我只是按照以下方式解决了它:

    <td class="displayValue" style="width: 10%;"><s:a href="%{hyperLinkToPage}"><s:property value="%{ReqNo}"/></s:a></td> 
在主bean中,我有以下带有setter和getter的变量:

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> 


我希望这会有所帮助。

我也遇到了同样的问题,我只是通过以下方式解决了它:

    <td class="displayValue" style="width: 10%;"><s:a href="%{hyperLinkToPage}"><s:property value="%{ReqNo}"/></s:a></td> 
在主bean中,我有以下带有setter和getter的变量:

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> 


我希望它会有所帮助。

没有充分的理由使用
,除非您将其用于Ajax请求。没有充分的理由使用
,除非您将其用于Ajax请求。问题是我需要包装这两个部分,1)URL-在迭代器中定义(未显示)使用s:url-和2)将s:a标记的文本字符串转换为Struts s:set变量,这样就可以在页面中的各个位置使用它,而无需重新创建一些逻辑(为了简洁起见,也没有显示)这是用来创建链接的替代版本。但是请看我自己对下面问题的回答。“罗恩,那么我可能会考虑尝试<代码> <代码>。我不太明白你在做什么,我还不相信这是一个很好的方法去做。这在目前看来有太多的逻辑。问题是我需要把这两个部分包起来,1)URL-在迭代器(未显示)中使用s:URL定义-和2)将s:a标记的文本字符串转换为Struts s:set变量,以便在页面中的各个位置使用它,而无需重新创建一些逻辑(为简洁起见,也未显示)这是用来创建链接的替代版本。但是请看我自己对下面问题的回答。“罗恩,那么我可能会考虑尝试<代码> <代码>。我不太明白你在做什么,我还不相信这是一个很好的方法去做。这在目前为止看来有太多的逻辑。了解这个用例。现在发生的事情是,这个JSP正在使用Springframework中的authz:authorize标记以及Struts2。Struts被要求做的很多事情都依赖于基于Spring的条件语句。因此这个JSP最终成为两者之间的一种中介。有一个Struts bean被定义,我可以抛出一些我想,这些丑陋的东西是为了从JSP中获取信息