jFinal类似spring mvc的@ModelAttribute注解怎么实现

平安OSC 发布于 2014/03/22 19:30
阅读 467
收藏 0

 jfinal实现导航动态选中,需要访问特定模块的controller的时候动态往页面传当前导航的标识,请问怎么一步到位?总不能每个方法都setAttr("nav","user");吧? 

用spring mvc实现时,只需要在此模块的controller中加一个

@ModelAttribute
public void setNav(Model model) {
    model.addAttribute("nav", "messager");
}

以后只要访问这个controller的所有方法都会模块向页面传递nav="messager"的参数,页面可以用

<li <c:if test='${nav eq "messager" }'> class="active" </c:if> >
    <a href="${ctx}/user/my/messenger/usermessage"> <i class="icon-comment"></i> 消息中心</a>
</li>

判断将“消息中心”这个导航给选中,请问用jfinal怎么实现?

本人接触jfinal不长,希望能得到各位的详细解答!

加载中
0
JFinal
JFinal

    添加一个全局 NavInterceptor,在里面针对不同的 controllerKey 或者 actionKey 设置其值,大致的代码如下:

public class NavInterceptor implements Interceptor {
  private Map<String, String> navMapping = new HashMap<String, String>(){{
    put("/", "index");
    put("/message", "message");
    // 其它导航标记值
  }};
	
  public void intercept(ActionInvocation ai) {
    String nav = navMapping.get(ai.getControllerKey());
    if (nav != null)
      ai.getController().setAttr("nav", nav);
    ai.invoke();
  }
}
1
JFinal
JFinal
   此外还有很多办法,例如:如果你用的是 JSP,可以在页面前面直接定义常量值。如果你用的是 freemarker 可以将导航抽取成一个带参数的宏,在各个页面引用这引宏时,直接传入导航的参数值,后面这种是本人一直在用的方法
0
平安OSC
平安OSC

引用来自“JFinal”的答案

    添加一个全局 NavInterceptor,在里面针对不同的 controllerKey 或者 actionKey 设置其值,大致的代码如下:

public class NavInterceptor implements Interceptor {
  private Map<String, String> navMapping = new HashMap<String, String>(){{
    put("/", "index");
    put("/message", "message");
    // 其它导航标记值
  }};
	
  public void intercept(ActionInvocation ai) {
    String nav = navMapping.get(ai.getControllerKey());
    if (nav != null)
      ai.getController().setAttr("nav", nav);
    ai.invoke();
  }
}

非常感谢,有思路了!

返回顶部
顶部