jsp可以在打开页面之前执行一些代码,比如判断一些条件做不同的显示,不知道jsf如何做到
taoman
2009-09-16
试了下,我在jsf 2.0下的xhtml页面中不能用< jsp:include page="" >标签和< jsp:scriptlet标签哦
另外在bean中如何处理?managed bean的构造中做好判断和初始化数据,然后在view中拿bean的数据显示? |
|
terryzhou
2009-09-17
taoman 写道 filter用于验证登陆是不错。但是我们还是常常会遇到当打开一个页面时,要做一些判断和处理的情况,就比如根据日期是偶数还是单数,在页面显示不同的东西,这是很简单的举例。而这种打开,不一定是其他页面提交过来的。
这时候,jsf页面应该怎么办呢? 重复问题,见http://jsfgroup.group.iteye.com/group/topic/13989 刚回复过,懒得说两次了 |
|
pute
2009-09-18
使用包装器模式,重写视图处理器,测试如果有登陆会话信息,则通过,没有必要在每一页都加上一段代码。
下面给出样例代码: /** * 在创建视图阶段实行对保护资源的访问控制 * @param context * @param viewId * @return */ @Override public UIViewRoot createView(FacesContext context, String viewId) { UIViewRoot viewRoot = null; //判断viewId是否是隶属于保护资源,如果是pass=true,否pass=false,pass是通行证意思 boolean pass = false; //匹配命中的保护路径 String protectPath = null; //获得注册路径,凡注册路径都属于保护资源,需要明确授权才可访问 FacesApplicationBean appBean = FacesBeanFactory.getFacesApplicationBean(); //获得注册路径的ID集合 List pathKeyList = appBean.getRegisteredPathsKey(); //进行前缀匹配,如果匹配,说明访问资源为保护资源 for(Object obj:pathKeyList){ String key = (String)obj; pass = viewId.startsWith(key); //如果pass为真,则终止跳出循环 if(pass==true){ protectPath = key; break; } } //进一步处理 if (pass) { //访问保护资源 //判断当前访问受保护资源的用户是否具有相应的权限 FacesSessionBean sessionBean = FacesBeanFactory.getFacesSessionBean(); Map currentActorDeRegisteredPathMap = sessionBean.getCurrentActorDeRegisteredPathMap(); //判断当前命中的保护路径,对于该角色来说,是否可访问 Object obj = currentActorDeRegisteredPathMap.get(protectPath); if(obj == null){ //无权访问 viewRoot = this.parent.createView(context, Constant.GLOBAL_ERROR_JSP); }else{ //有权访问 viewRoot = this.parent.createView(context, viewId); } } else { //访问非保护资源 viewRoot = this.parent.createView(context, viewId); } //log.info("创建视图:" + viewRoot.getViewId()); return viewRoot; } |
|
taoman
2009-09-22
pute的这个办法是否是extend javax.faces.application.ViewHandler
来实现? 然后 <application> <view-handler>myViewHandler</view-handler> </application> 是否这样? |
|
pute
2009-09-28
|