Action写法心得

       最近一段时间,一直在忙着做项目,这个项目的运用的是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”。

        通过这次教训,让我明白不是什么东西都按部就班照搬就行,模仿之前需要深刻地理解它们,知道它们在那里用,如何用的正确,这样才会将别人已有的经验变为自己的知识。

原文地址:https://www.cnblogs.com/hzcya1995/p/13315452.html