我使用的是 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
,上述所有操作都失败,没有记录任何错误。
只有第三个选项的失败是真正预期的,因为 s:push
需要值。 .
背景:
我需要将 URL 传递给单独的 .js
中的 JavaScript 函数。来自选择标记的文件,如下所示:
<s:select name="actionAttribute" list="attributeList"
listKey="key" listValue="value"
onchange="ajaxFunction('%{methodUrl}')" />
我知道我可以使用'<s:url action="action" method="method" />'
在 JS 函数中,如果该函数是在我的 .jsp
中定义的文件,但当 JavaScript 位于不同文件中时,这不起作用。
当我输入上面的段落时,我意识到我可以在 JSP 中定义一个 JavaScript 函数,它将 URL 传递给 ajaxFunction
.
所以现在我的问题纯粹是学术性的。
有没有办法s:push
一个s:url
到值栈上?
最佳答案
如果您使用 url
的 var
属性标记它会将值放入值堆栈中。
<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>
关于java - 如何在 Struts 2 中将 url 压入值堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23224957/