关于Oracle ADF中的打印问题

刚接触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>
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值