1

我正在使用 Struts 2.3.16。

如何将操作 URL 推送到值堆栈?

我试过了:

<s:push value="methodUrl">
  <s:url action="action" method="method" />
</s:push>

<s:push value="methodUrl">
  <s:url action="action" method="method" var="methodUrl" />
</s:push>

<s:push>
  <s:url action="action" method="method" var="methodUrl" />
</s:push>

即使我有上述所有错误,也没有记录任何错误struts.devMode=true。只有第三个选项的失败是真正预期的,因为 value 是必需的s:push

背景:我需要将 URL 传递给 JavaScript 函数,该函数位于与.jsselect 标记不同的文件中,如下所示:

<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{methodUrl}')" />

我知道'<s:url action="action" method="method" />'如果函数是在我的.jsp文件中定义的,我可以在 JS 函数中使用,但是当 JavaScript 在不同的文件中时这不起作用。

当我输入上面的段落时,我意识到我可以在我的 JSP 中定义一个 JavaScript 函数,它将 URL 传递给ajaxFunction.

所以现在我的问题纯粹是学术性的。

s:push有没有办法s:url进入价值堆栈?

4

2 回答 2

0

如果您使用标签var的属性,它会将值放入值堆栈。url

<s:url action="action" method="method" var="methodUrl" />
<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{#methodUrl}')" />

你也可以使用不带参数的函数

<s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction()" />
<script type="text/javascript">
  function ajaxFunction(){
    var methodUrl = '<s:property value="%{#methodUrl}"/>';
    // or even better
    var methodUrl2 = '<s:url action="action" method="method" var="methodUrl" />';
  }
</script>

好的,如果你想将push一个值放入值堆栈,你应该使用这个标签,但该值应该是对对象的引用,它将转换为字符串 url 并作为参数传递给 JS 函数

<s:url action="action" method="method" var="methodUrl" />
<s:push value="%{#methodUrl}">
  <s:select name="actionAttribute" list="attributeList"
          listKey="key" listValue="value"
          onchange="ajaxFunction('%{top}')" />
  <script type="text/javascript">
    function ajaxFunction(url){
      alert(url);
    }
  </script>
</s:push>
于 2014-04-22T17:07:25.137 回答
0

由于缺乏积极响应,使用 s:push 将 s:url 推送到值堆栈似乎是不可能的。罗曼的回答不是我想要的。

根据 Roman 的回答和我自己的实验,显然必须使用 s:url 的 var 属性才能获取值堆栈上的 URL。为了防止 URL 出现在页面上,必须在 JSP 中使用 JavaScript,例如基于 Roman 的第二个代码块:

<script type="text/javascript">
  function noNeedToExecute(){
    var dummy = '<s:url action="action" method="method" var="methodUrl" />';
  }
</script>

或者,必须像这样使用 CSS:

<style>
  .hidden {display: none;}
</style>
...
<span class=hidden>
  <s:url action="action" method="method" var="methodUrl" />
</span>

我希望有一个纯粹的 Struts 实现,但很明显我必须忍受失望。;-)

我离开上述内容是为了不隐藏我完全错误的事实。我不知道我做了什么错误的举动让我相信这<s:url ... var="varName" .../>会在页面上显示 URL,然后需要隐藏。我错了,我为浪费 Roman C 的时间而道歉。

于 2014-04-25T16:59:38.003 回答