`

EWeb4j-1.b.6.5 新的特性介绍—mvc action篇

阅读更多
(1) Controller支持以下约定:
action方法不填写注解RequestMapping的时候,默认以方法名为url-mapping值。
action 方法返回类型为void的时候框架不做任何跳转处理。
缺省返回值忽略大小写。例如ajax。
类名如果以“Controller”,“Control”,“Action”结尾的话,可以不用添加@Controller注解,框架也能识别为控制器。
这里有个最新的例子:
package test.controller;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import test.po.Pet;
import com.cfuture08.eweb4j.mvc.annotation.Param;

/**
 * this is a pojo action test
 * 
 * 约定代替配置,可以看到整个action类真正实现0配置! 方法名——> URL访问映射。 属性名——>URL参数名
 * 类名以Controller、Control、Action结尾的框架以控制器处理。
 * 
 * 并且action类兼容Struts2和SpringMVC3的写法。
 * 
 * @author weiwei
 * 
 */
public class ZeroConfigAction {

	/**
	 * 从当前会话中获取输出对象进行页面打印。 只需要声明即可,框架会自行注入。
	 * 返回类型为void、返回值为ajax(忽略大小写)、null的时候,访问action后,框架不会做任何跳转。
	 * 
	 * @param out
	 */
	public void sayHello(PrintWriter out) {
		out.print("Hello!");
	}

	/**
	 * 重定向跳转
	 * 
	 * @return
	 */
	public String testRedirect() {
		return "redirect:sayHello";
	}

	/**
	 * 服务端跳转
	 * 
	 * @return
	 */
	public String testForward() {
		return "index.jsp";// or "forward:index.jsp"
	}

	/**
	 * pojo action 的属性与url属性绑定,同时方法参数传递(框架实现)
	 * 
	 * @param out
	 */
	public void testPojoParam(PrintWriter out) {
		out.print(info);
	}

	/**
	 * 当pojo action 的属性是pojo的时候,支持无限嵌套的参数绑定。 当然,方法的参数是pojo这种情况也是一样的。
	 * 
	 * @param out
	 * @param fuck
	 */
	public void testPojoParamAndUrlParam(PrintWriter out,
			@Param("fuck") String fuck) {
		out.print("fuck-->" + fuck + "pet.master-->" + pet.getMaster());
	}

	/**
	 * pojo action 的属性有四个缺省值,只要声明+setter&getter方法。框架就会在运行时刻实例化它们,并且传入当前会员的上下文。
	 * 这四个参数是:HttpServletRequest,HttpServletResponse,PrintWriter,HttpSession
	 */
	public void testOut() {
		out.print("out-->" + info);
	}

	// ------------------------------------------------------
	private Pet pet;
	private String info;
	private HttpServletRequest req;
	private PrintWriter out;
	public String getInfo() {return info;}
	public void setInfo(String info) {this.info = info;}
	public Pet getPet() {return pet;}
	public void setPet(Pet pet) {this.pet = pet;}
	public HttpServletRequest getReq() {return req;}
	public void setReq(HttpServletRequest req) {this.req = req;}
	public PrintWriter getOut() {return out;}
	public void setOut(PrintWriter out) {this.out = out;}
}

(2)mvc中,为了改进性能,将Class.forName(ActionBeanName),改为缓存方式调用。这样省去了lookup的过程,效能会提升。当系统需要应对高并发的时候,很有效。
(3)废除了formBean的配置,框架自动识别pojo参数,并且支持无限嵌套pojo属性。无需任何配置。

约定优于配置、零配置将会是这个版本较重要的关注点,但不是唯一的。

待续......
2
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics