(1)setorder.jsp页面
填写顾客信息
(2) Struts2中配置的对应配置如下
Adlogininterceptor是自定义的一个拦截器,用于区分登录用户与非登录用户。 |
(1)将method设为“get”以及excute()方法中添加那些打印参数语句是为了调试用的。在实际的setorder.jsp中提交的不只是realname,address两个参数,还提交了另外一些参数,有些参数并不是Order类的属性,请问这是否影响结果?是否还能在setorder.jsp中用order.address?
答:
1.Order类的属性直接使用我说方法
2.不是Order类的属性,是其他PO类的属性,只要在action中有该PO的set,get方法即可将值设置到该po的属性中
3.是其他值
a.作为action的变量并 设置get,set方法;
b。不作为action的变量。使用request.getParameter("");获得该值。
(2)在数据库中order表的属性为name,address,并非setorder.jsp对应的realname,address,并且在Order.hbm.xml中配置的也是name,address,请问这是否也是可能不能得到正确结果的原因?
答: 上面的第3中情况。
是可以获得正确的结果的
拦截器设置的有问题吧? 先去掉拦截器试试??
第一步:
(1)setorder.jsp页面
第二步:
(2) Struts2中配置的对应配置如下 。。
在execute()方法中:
Map request = (Map)ActionContext.getContext().get("request");
realname = (String)request.get("realname");
System.out.println(realname);
address = (String)request.get("address");
System.out.println(address);
不需要这样。你只要提供了realname,address的get,set方法。struts2会根据ognl将之设置到realname,address。
即 直接:
order.setRealname(realname);
order.setAddress(address);
当然以上只是根据你的需求来实现的解决方案
最好的做法是:
1.在jsp页面:
姓名:改为:
姓名:2.在action类提供:
private Order order;和它的get,set方法。
那么在excute中直接
//添加到数据库
bookcontrol.CreateOrder(order); 即可
我记得我曾经为谁解释过这个问题,你用了自定义的拦截器,那么在你的请求被自定义拦截器拦截之后,就等于是走了你的路线,那么在那里面即使你将它放过了,但是请求去哪里了呢?结束了。。修改方法
/shopjsp/orderok.jsp
/shopjsp/setorder.jsp
解释一下,首先过你的拦截器,通过之后,把请求再次抛给struts2默认拦截器,然后返回结果。。。
在你的action里面声明两个私有变量,
private String realname;
private String address;
之后再get和set这两个变量(sturts2的字段驱动)
在调用方法的时候后,
如:
public String sendMsg()
{
xxx.sendMsg(realname,address);
}
不行就照着写,然后调式跟踪下,或者out一下