这几天一直在做SSH的网上商城的项目,发现在struts中常用的存取值的方法就那么几种,这里汇总了一下,希望对大家有用。
Session中存取
存入session
<span style="font-size:18px;">ServletActionContext.getRequest().getSession()
.setAttribute("existUser",existUser);
</span>
从session中取值
<span style="font-size:18px;">User existUser =(User ) ServletActionContext.getRequest()
.getSession().getAttribute("checkcode");
</span>
也就是我们取值的时候是需要强转
放入值湛中
在方法中我们把值放入值站中
ActionContext.getContext().getValueStack().set("listzilei",listzilei);
//取值(循环):
<s:property value="%{#request.listzilei}"/>
<s:property value="#request.listzilei"/>
<s:property value="listzilei"/>
<s:property value="#attr.listzilei"/>
<%=request.getAttribute("listzilei") %>
<s:iterator value="#request.listzilei"id="dtree">
都可以取到值。
当保存在contextMap中时:
ActionContext.getContext().getContextMap().put("listzilei",listzilei);
取值:用
<s:property value="listzilei"/>不行
<s:propertyvalue="#session.listzilei"/>不行
<s:propertyvalue="#params.listzilei"/>不行
下面都可以取到值:
<s:propertyvalue="%{#request.listzilei}"/>
<s:property value="#request.listzilei"/>
<s:property value="#attr.listzilei"/>
<%=request.getAttribute("listzilei")%>
${listzilei}
3:直接用request.setAttribute()
request.setAttribute("listzilei", listzilei);
<s:property value="%{#request.listzilei}"/>
*
<s:property value="#request.listzilei"/>
**
<s:property value="listzilei"/>只有这个不行
***
<s:property value="#attr.listzilei"/>
****
<%=request.getAttribute("listzilei") %>
*****
${listzilei}
4,Maprequest:
Map request1 = (Map)ActionContext.getContext().get("request");
request1.put("listzilei", listzilei);
<s:property value="%{#request.listzilei}"/>
*
<s:property value="#request.listzilei"/>
**
<s:property value="listzilei"/>不行
***
<s:property value="#attr.listzilei"/>
****
<%=request.getAttribute("listzilei") %>
*****
${listzilei}
总结:说明getContextMap取值的范围比valueStack大一点。只保存在request的attribute中。而ContextMap与手动request.setAtribute()及Map request是一样的。
struts2,a页面url传值,,再执行方法,再到b页面,a.jsp?id=33,在b.jsp页面都可以取到值。
方法中采用
<action name="delete1" class="dtreeAction"method="delete1">
<result type="redirect-action"name="success">
<param name="actionName">zilei1.action</param>
<param name="id">${id}</param>
</result>
</action>
<s:property value="%{#request.id}"/>
*
<s:property value="#request.id"/>
**
<s:property value="id"/>不行
***
<s:property value="#attr.id"/>
****
<%=request.getAttribute("id") %>
*****
${id}
点击 b 页面的删除再回到 b 页面,什么都没有。
当struts.xml中用${id}时:
//request.setAttribute("id", id);不行
//ActionContext.getContext().getValueStack().set("id",id);可以
//ActionContext就是ognl上下文,是整个上下文最大的一个。e
//ActionContext.getContext().getContextMap().put("id", id);可以
//request1.put("id", id);不行
当struts.xml中用${request.id}时:
request.setAttribute("id", id);可以
ActionContext.getContext().getValueStack().set("id",id);可以
ActionContext就是ognl上下文,是整个上下文最大的一个。e
ActionContext.getContext().getContextMap().put("id", id);可以
request1.put("id", id);可以
都可以的。
总结:ContextMap在struts.xml文件中可以取到值。用valuestack无法取到值,OgnlValueStack类包含两个重要的属性,一个root和一个context。其中root本质上是一个ArrayList,而context是一个Map(更确切的说是一个OgnlContext对象)。
暂时就把ContextMap和valueStack当成一样就行了,在.xml文件中有区别