关于struts2 <s:action />标签的使用问题
<s:actionname="getheader"namespace="/c2c"executeResult="true"></s:action><formname="f...
<s:action name="getheader" namespace="/c2c" executeResult="true"></s:action>
<form name="formQuery" id="formQuery" action="/providerOrder/orders.htm" method="post" >
<s:select list="#{1:'待支付',2:'已支付'}" value="%{status}" listKey="key" listValue="value" name="status"></s:select>
</form>
如上是我的一个jsp页面上的部分代码,<s:action />返回一个导航栏到当前页,请求的是action A; <form />内包含的是搜索条件,请求的是action B; 问题在于 B里面对status这个变量进行了封装,A里面也有一个同名变量,也进行了封装,这个时候,在页面上提交表单后,B响应过后,<s:action />居然会把参数status携带到action A里面,造成了数据类型不一致的异常,想知道为什么会造成这种现象,有没有什么解决办法,既在<s:action />请求A时,不发送表单内的参数
此问题已解决,在<s:action />标签里加上 ignoreContextParams="true"即可不发送本页参数 展开
<form name="formQuery" id="formQuery" action="/providerOrder/orders.htm" method="post" >
<s:select list="#{1:'待支付',2:'已支付'}" value="%{status}" listKey="key" listValue="value" name="status"></s:select>
</form>
如上是我的一个jsp页面上的部分代码,<s:action />返回一个导航栏到当前页,请求的是action A; <form />内包含的是搜索条件,请求的是action B; 问题在于 B里面对status这个变量进行了封装,A里面也有一个同名变量,也进行了封装,这个时候,在页面上提交表单后,B响应过后,<s:action />居然会把参数status携带到action A里面,造成了数据类型不一致的异常,想知道为什么会造成这种现象,有没有什么解决办法,既在<s:action />请求A时,不发送表单内的参数
此问题已解决,在<s:action />标签里加上 ignoreContextParams="true"即可不发送本页参数 展开
1个回答
推荐于2016-08-20
展开全部
request里的东西,都同时也放在了valueStack的顶层。
以前是request、response、context等这些是基本默认对象作为根值对象,在栈的顶层,你可以直接调用,比如request.什么什么。
现在Sturts2,顶层换了。比如你的request里先前存了一个叫name的变量,那么OGNL中,你这样就可以:
<s:什么什么... %{name} ... /> 这样就取到值了。
如果是普通HTML标签,这样:
<input 什么什么... ${name} ... /> 这样取值。
我觉得它俩反过来就不好用,也不知道是不是我配置的问题。
那么假如你需要用request或response了,实际上调用:
ServletActionContext.getRequest();或
ServletActionContext.getResponse();
现在OGNL用井号#代替了上面,即#request就可以取到了。
又比如你自己<s:bean什么什么>一个对象addr出来,那么这个对象跟默认的那几个对象,即request、response等等是在一个层次上的,对于以前的jsp,是可以直接调用到的,但Struts2不行了。所以:
#addr
与
%{addr}或${addr}
是两个东西,后者是request里的,当然人为也可能让它们都指同一个东西。
以前是request、response、context等这些是基本默认对象作为根值对象,在栈的顶层,你可以直接调用,比如request.什么什么。
现在Sturts2,顶层换了。比如你的request里先前存了一个叫name的变量,那么OGNL中,你这样就可以:
<s:什么什么... %{name} ... /> 这样就取到值了。
如果是普通HTML标签,这样:
<input 什么什么... ${name} ... /> 这样取值。
我觉得它俩反过来就不好用,也不知道是不是我配置的问题。
那么假如你需要用request或response了,实际上调用:
ServletActionContext.getRequest();或
ServletActionContext.getResponse();
现在OGNL用井号#代替了上面,即#request就可以取到了。
又比如你自己<s:bean什么什么>一个对象addr出来,那么这个对象跟默认的那几个对象,即request、response等等是在一个层次上的,对于以前的jsp,是可以直接调用到的,但Struts2不行了。所以:
#addr
与
%{addr}或${addr}
是两个东西,后者是request里的,当然人为也可能让它们都指同一个东西。
Storm代理
2023-08-29 广告
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I...
点击进入详情页
本回答由Storm代理提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询