最近一段时间,一直在忙着做项目,这个项目的运用的是SSH2三大框架,页面是用dojo技术。
我之前对dojo有所了解,但是好长时间都在弄Flex和JSP写页面,dojo没有得到运用,导致有所生疏;另外,dojo中数据和数据库进行交互,都是JSON格式,即通过查询出来的数据格式符合JSON格式,因此Action的父包是继承json-default的。
昨天,我在做页面时,将@Action注解中的type="json"和location="/page/user.jsp"放在一起,导致页面在请求响应时无法返回结果。后来,在大神的帮助下,我彻底从中获得启发。
具体见下面:
错误做法:
@Component @Controller @ParentPackage("json-default") @Namespace("/page/user") public class UserAction extends BaseAction<Object> { private String stuNo; private String stuName; private UserService userService; private List<Line> chart = new ArrayList<Line>(); @Override @Action(value="stu",results={@Result(type="json",name="success")} public String execute() { List<User> list = new ArrayList<User>(); list = userService.getInfor(stuNo,stuName); return SUCCESS; } @Override @Action(value="stuChart",results={@Result(location="/page/user.jsp",name="success")} public String findStu() { //List<User> list = new ArrayList<User>(); chart = userService.getInfor(stuNo,stuName); return SUCCESS; } }
正确做法:
@Component @Controller @ParentPackage("json-default") @Namespace("/page/user") public class UserAction extends BaseAction<Object> { private String stuNo; private String stuName; protected UserService userService; @Override @Action(value="stu",results={@Result(type="json",name="success")} public String execute() { List<User> list = new ArrayList<User>(); list = userService.getInfor(stuNo,stuName); return SUCCESS; } }
@Component @Controller //@ParentPackage("json-default") @Namespace("/page/user") public class UserChartAction extends UserAction { private List<Line> chart = new ArrayList<Line>(); @Override @Action(value="stu",results={@Result(location="/page/user.jsp",name="success")} public String execute() { chart = userService.getInfor(stuNo,stuName); return SUCCESS; } }
正确的做法是不能将type="json"和location="/page/user.jsp"放在一起,必须将后者放在一个新的Action中,并且这个新Action是继承之前的那个Action,如果要用到之前的那个Action中的Service,需要将“private”改为“protected”。
通过这次教训,让我明白不是什么东西都按部就班照搬就行,模仿之前需要深刻地理解它们,知道它们在那里用,如何用的正确,这样才会将别人已有的经验变为自己的知识。