一.首先说下前台传数据到后台的方式
1.模型驱动:
在Action里面实现模型驱动User类,再实现setter和getter方法,当提交表格或者在url里面传值(参数要和表格里面的属性名一样,比如在用ajax异步请求是url参数username和表格里面的属性名一样),然后action那边就可以通过user.username拿到,和下面的方法不一样。
2.属性驱动:
在url中传参数,例如abc=1,然后在action中实例这个属性,并设置setter和getter方法,可以拿到这个值,form表格也一样,提交表格的时候输入框里面的属性名在action中实例化和setter,getter。
3.实体类驱动:
和第二稍稍不同,这里将表格里面的属性封装到一个实体类中,然后实例化实体类,再用实体类中的属性来获取从前台表格传来的数据
二.从后台传到前台
1.一般这里说的是从action到jsp的,从dao中查询到后,一般可以存到值栈中。
ActionContext.getContext().getValueStack().set("pb", pb);
然后在jsp页面直接调用pb就可以了,不用#。
s:iterator var="p" value="pb.list">
<li>
<a href="${pageContext.request.contextPath}/product_findByPid.action?pid=<s:property value="#p.pid"/>"/>
<img src="${pageContext.request.contextPath}/<s:property value="#p.image"/>" width="170" height="170" style="display: inline-block;">
<span style='color:green'> <s:property value="#p.pname" /> </span>
<span class="price"> 商城价: ¥<s:property value="#p.shop_price" /></span>
</a>
</li>
</s:iterator>
2.存到session中,数据在一个会话中有效,所以用户登录信息一般存在session中,还有就是比如需要在一个会话中都要显示的数据,比如一级分类等,也要保持session中,而之前的从后台回到前台页面显示的存到值栈就行了。
ServletActionContext.getRequest().getSession().setAttribute("existUser", existUser);
ServletActionContext直接继承了ActionContext,当然也继承了它父类的很多功能,它还提供了直接访问Servlet的相关对象的功能.
三.最后总结下在jsp页面显示的方法
1.action实现了模型驱动,在dao查询到返回数据之后,直接调用就行。例如下面的product就是在action中的模型驱动。
<s:property value="product.shop_price"/>
2.存到session或者值栈中后,用Struts2中的标签直接调用,这里的list就是存在session中的。用一个迭代器吧返回的列表都显示出来
<s:iterator var="c" value="#session.list">
<dl>
<dt>
<a href="${pageContext.request.contextPath}/product_findByCid.action?cid=<s:property value="#c.cid"/>&page=1"><s:property value="#c.cname"/></a>
</dt>
<s:iterator var="cs" value="#c.categorysecond">
<dd>
<a href="${pageContext.request.contextPath}/product_findByCsid.action?csid=<s:property value="#cs.csid"/>&page=1"><s:property value="#cs.csname"/></a>
</dd>
</s:iterator>
</dl>
</s:iterator>