我正在使用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传递给JavaScript函数,该函数位于选择标记的单独.js
文件中,如下所示:
<s:select name="actionAttribute" list="attributeList"
listKey="key" listValue="value"
onchange="ajaxFunction('%{methodUrl}')" />
我知道如果函数在我的'<s:url action="action" method="method" />'
文件中定义,我可以在JS函数中使用.jsp
,但是当JavaScript在不同的文件中时,这不起作用。
当我输入上面的段落时,我意识到我可以在JSP中定义一个JavaScript函数,将JavaScript传递给ajaxFunction
。
所以现在我的问题纯粹是学术性的。
有没有办法s:push
s:url
到价值堆栈?
答案 0 :(得分:0)
如果您使用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>
答案 1 :(得分: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" .../>
会在页面上显示需要隐藏的网址。我错了,我为浪费罗曼C的时间道歉。