ADF调用window打印

本文介绍在JSF页面中实现打印功能的方法,包括通过beforePhase指定方法触发打印、利用RegionController接口更新区域以及直接调用JavaScript的window.print()函数。

打印说明:

1 打印的页面不是jsff

2执行打印的button只打印button所在页面的父区域


具体步骤:

1在页面的beforePhase 指定method,代码如下:

<f:view xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
        beforePhase="#{Bean.beforePhaseMethod}">


    public void beforePhaseMethod(PhaseEvent phaseEvent) {
        if (phaseEvent.getPhaseId() == PhaseId.RENDER_RESPONSE) {
            FacesContext fctx = FacesContext.getCurrentInstance();
            //check internal request parameter
            Map requestMap = fctx.getExternalContext().getRequestMap();
            Object showPrintableBehavior = requestMap.get("oracle.adfinternal.view.faces.el.PrintablePage");
            if (showPrintableBehavior != null) {
                if (Boolean.TRUE == showPrintableBehavior) {
                    ExtendedRenderKitService erks = null;
                    erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
                    //invoke JavaScript from the server
                    erks.addScript(fctx, "window.print();");
                }
            }
        }
    }

    public String print() {
        // Add event code here...
        FacesContext facesContext = FacesContext.getCurrentInstance();

        org.apache.myfaces.trinidad.render.ExtendedRenderKitService service =
            org.apache.myfaces.trinidad.util.Service.getRenderKitService(facesContext, ExtendedRenderKitService.class);

        service.addScript(facesContext, "window.print();");
        return null;
    }

如果是jsff页面我们如何实现打印呢?

1:编写manageBean实现RegionController接口:

public class Bean implements RegionController {
    public Bean() {
        super();
    }

    @Override
    public boolean refreshRegion(RegionContext regionContext) {
        int refreshFlag = regionContext.getRefreshFlag();
        FacesContext fctx = FacesContext.getCurrentInstance();
        //check internal request parameter
        Map requestMap = fctx.getExternalContext().getRequestMap();

        Object showPrintableBehavior = requestMap.get("oracle.adfinternal.view.faces.el.PrintablePage");
        if (showPrintableBehavior != null) {
            if (Boolean.TRUE == showPrintableBehavior) {
                ExtendedRenderKitService erks = null;
                erks = Service.getRenderKitService(fctx, ExtendedRenderKitService.class);
                erks.addScript(fctx, "window.print();");
            }
        }
        regionContext.getRegionBinding().refresh(refreshFlag);
        return false;
    }

    @Override
    public boolean validateRegion(RegionContext regionContext) {
        regionContext.getRegionBinding().validate();
        return false;
    }

    @Override
    public boolean isRegionViewable(RegionContext regionContext) {
        return regionContext.getRegionBinding().isViewable();
    }

    @Override
    public String getName() {
        // TODO Implement this method
        return null;
    }

}


2: 找到页面定义文件:





最后一种办法是直接调用window.print函数,如:


         <af:button text="button 1" id="b1">
                <af:clientListener type="action" method="dd"/>
            </af:button>

    <af:resource type="javascript">
        function dd(event){
            window.print();
        }
    </af:resource>

rendered="#{adfFacesContext.outputMode!= 'printable'}"

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值