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
我把程序放到了kenai.com上,需要的可以自行点击如下链接下载,解包即可察看faces配置文件。

威博文件管理系统

目前还在开发中。
Global site tag (gtag.js) - Google Analytics