2011-10-22 66 views
0

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

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

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

如果我为s添加“escape ='true'”参数:设置它的功能相同,只显示'<'和'>'标签的高度。

如何将有效的锚标签放入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> 

回答

0

这不是你想怎么打造这个 - 你有什么是两回事,一个URL,该URL的文本字符串。您已有的网址。链接文字只能使用<s:set>

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

+0

问题创造URL像一提的是,我需要换两部分,1)URL - 使用S这是在一个迭代器(未显示定义): url); 2)将s:a标签的文本字符串转换为Struts s:set变量,以便它可以在页面中的各个位置使用,而无需重新创建用于创建替代版本的某些逻辑(为简洁起见,也未显示)的链接。但请参阅下面我自己的回答。 – Ron

+0

@Ron然后,我可能会考虑尝试''。我并不是很了解你在做什么,我还不确定这是否是一种很好的方法 - 迄今为止,这种观点太多了。 –

1

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

您可以参考下面的链接了解详情:

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

+0

虽然没有很好的理由使用'',除非您将它用于Ajax请求。 –

0

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

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

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

不幸的是,字符串必须用s:属性的单独位来构建,但是你能做什么?

<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

仍然如此。视野中的工作太多;我不明白这个用例。 –

+0

发生了什么事是这个JSP使用Springframework的authz:authorize标签和Struts2。 Struts被要求做的很多事情取决于基于Spring的条件语句。所以这个JSP最终成为两者之间的中介。有一个定义的Struts bean,我可以把这些丑陋的东西扔到那里,我想,把它从JSP中解放出来。 – Ron

+0

第二个想法是,有一堆东西使用来自外部资源文件的字符串,来自Action类的值和Spring。即使我在调用某个实用bean来构建链接(并摆脱丑陋的Struts代码)时将这一切都放在一起,与整体相比,代码减少量可以忽略不计。 – Ron

0

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

属性'ID'已弃用,而不是使用'var'。 –