如何在struts url标记中添加或更改params?

时间:2010-02-10 04:43:07

标签: java jsp struts2 struts

在struts中,我想要一个基本URL(< s:url ...)设置一些参数(< s:param ...),然后将参数添加到URL或更改某些参数的值。例如:

<s:url action="getSomeData" id="baseDataUrl">
    <s:param name="someID" value="%{currentID}"/>
</s:url>

然后我可以<s:property value="baseDataUrl" />,它会吐出像/getSomeData.do?someID=5这样的东西。 (我保持这个例子的params简单,但你可以想象有更多的默认参数。例如,我正在处理的应用程序有3个参数,每个URL都是相同的,有两个更改。)< / p>

我希望能够在定义基本URL后添加或更改参数。我梦想着两种方法:

<s:url base="baseDataUrl" id="breadUrl">
    <s:param name="bread" value="%{'toast'}"/>
</s:url>

然后<s:property value="breadUrl" />将导致/getSomeData.do?someID=5&bread=toast。另一种方法是使用占位符定义基本URL:

<s:url action="getSomeData" id="baseDataUrl">
    <s:param name="someID" value="%{currentID}"/>
    <s:param name="bread" />
    <s:param name="jelly" />
</s:url>

然后在我要求财产时填写:

<s:param url="baseDataUrl" name="bread" value="%{'toast'}"/>
<s:param url="baseDataUrl" name="jelly" value="%{selectedJam}"/>

所以<s:property value="baseDataUrl" />会导致/getSomeData.do?someID=5&bread=toast&jelly=7。

s:url(http://struts.apache.org/2.0.14/docs/url.html)的文档说“动态属性允许:false”所以我想我正在冒险进入自定义标记区域。这感觉就像这样一个常见的用例(用一些参数定义基本URL,然后添加或更改其中一些),我不想重新发明轮子。搜索没有产生任何结果,但也许我不是在寻找合适的东西。我愿意接受各种各样的建议!

1 个答案:

答案 0 :(得分:1)

以下是我能想到的几个选项

  1. 使用名为“delegatorAction”的操作,仅写入所需的额外参数。您可以编写一个Action / Handler,然后“推断”其他参数(在本例中为“someID”)。这可能很复杂,您可能必须在每次更改网址处理逻辑时更改此代码
  2. 您可以编写自己的url标记,并按照建议的方式说出并拥有“base”之类的属性,它只是评估基本属性并向其添加任何参数(您可以为其子类化Url标记)
  3. 最简单的方法可能是首先将3个参数声明为url,然后使用标准的s:property标签添加额外的参数(Heck我无法输出xml代码,即使使用正确的格式也不知道为什么,必须是因为铬)
  4. 在这种方法中,你只是在最后追加字符串。