打印说明:
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;
}
}
最后一种办法是直接调用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'}"