JFinal 在 action 中调用另一个action方法与调用forwardAction有何不同?

galaxy58 发布于 2012/07/23 09:12
阅读 6K+
收藏 3

我在JFinal 开源的 jfinal deom 项目中看到有一种在 action 中直接调用 index() 这个 action 的用法,请问这种用法与调用 forwardAction 方法有何不同?

加载中
2
a
alvinte
嗯,顺便一提,controller里面的public方法才被当做action调用,不想做action仅想做普通方法的,做成非public即可
1
JFinal
JFinal
    在 action 方法中调用本 controller 中的另一个 action 方法就是一个普通的方法调用而已。而 forwardAction(...) 方法则将本次请求转发给指定的 action,如果被转发到的 action有 interceptor 的话会被调用到。本质的区别就在于后者会调用目标 action 的拦截器,你可以当做是一次新的请求,但对于浏览器来说只是一次请求 :)
0
dandyIder
dandyIder

引用来自“JFinal”的答案

    在 action 方法中调用本 controller 中的另一个 action 方法就是一个普通的方法调用而已。而 forwardAction(...) 方法则将本次请求转发给指定的 action,如果被转发到的 action有 interceptor 的话会被调用到。本质的区别就在于后者会调用目标 action 的拦截器,你可以当做是一次新的请求,但对于浏览器来说只是一次请求 :)

render("/user/edit")

这样可以直接跳转到 edit() 方法里面吗?

public class UserController extends BaseController {
    
      @Before(UserCheckInterceptor.class)
      public void edit(){
	   setAttr("user", User.dao.get(getParaToInt(0, 0)));
	   render("WEB-INF/pages/user/edit.jsp");
     }

     @Before(EvictInterceptor.class)
	 @CacheName("user")
	 public void update() {
		 int id = getParaToInt("user.id");
		 String new_pass = getPara("new_pass");
		 User.dao.updatePassword(id, new_pass)
 		 setAttr("msg", "密码修改成功");
		 render("/user/edit/"+id);
	 }
}



在 update 方法里,render("/user/edit/"+id) 应该是 /user/edit1

应该是对应的 edit() 

这里是用 forwardAction("/user/edit/"+id) 吗?

@JFinal

dandyIder
dandyIder
恩,知道了,谢谢了。这几天都在捣腾JFianl,才接触没多久。 现在发现了@myaniu的JFianlShirop,正在到捣腾呀。
JFinal
JFinal
render 方法只会去渲染,不会跳去另一个 action。跳去另一个 action 需要用 forwardActoin 以及 redirect,前者是在后端跳转,后者是响应浏览器一个链接让其再发起一个新的请求
返回顶部
顶部