关于Oracle ADF中的打印问题

本文详细介绍了如何在Oracle ADF中实现打印功能,包括使用af:showPrintablePageBehavior标签弹出打印窗口,以及如何在窗口中自动执行打印操作。此外,还展示了如何打印页面的一部分内容,并通过af:panelSplitter进行内容展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚接触Oracle ADF,确实是非常的不熟悉,编译器,各种组件,jsf。万事开头难,坚持。


这几天在做打印的功能,一般的方法都是写一个js方法,调用window.print()。
ADF中有自己的方法,就是在commandButton中加入af:showPrintablePageBehavior.例如:
<af:commandButton text="Print" id="cb2" >
        <af:showPrintablePageBehavior/>
  </af:commandButton>
这个标签的作用是弹出一新的个窗口,这个窗口的内容是<f:view></f:view>之间的所有内容,但是一些按钮 不会显示.
然后在<f:view>中的beforePhase属性上绑定一个方法。这个方法是通用的:
   public void beforePhaseMethod(PhaseEvent phaseEvent) {  
            //only perform action if RENDER_RESPONSE phase is reached
          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();");
              }
             }            
          }
         }
例如:<f:view beforePhase="#{pageFlowScope.Bean.beforePhaseMethod}",
这个方法的作用是在你弹出的窗口中自动的弹出打印的对话。
看erks.addScript(fctx, "window.print();");就明白其实是加了一个js方法,也是调用的window.print();
这样就完成了。


但是,有时候我们只要打印页面的一部分,并不需要打印<f:view></f:view>中的所有内容,我们可以利用
af:panelSplitter和af:panelAccordion。但是af:panelAccordion会改变页面布局,所以不考虑它。
我们把要打印的内容放在af:panelSplitter标签中间,当然也有包括打印的按钮。
af:panelSplitter 首先要加入的是<f:facet name="first"> name必须是first。然后再<f:facet>标签中加入
<h:panelGroup>标签,把要打印的内容放入<h:panelGroup>中就行,例如:
<af:panelSplitter styleClass="AFStretchWidth" inlineStyle="height:1400px">
  <f:facet name="first">
  <h:panelGroup>
这中间是打印的内容和打印的按钮,大致就是这样的了。
</h:panelGroup>
</f:facet>
  </af:panelSplitter>
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值