我正在使用JSF 2.0,Primefaces 3.5& JBoss Application Server 7.0 ..
在我的Online Shopping Application
中,我正在尝试打印订单(我的代码)的详细信息。
在Chrome和FireFox中一切正常,但在IE9及更高版本中,它会出现错误“Internet Stopped Working”并且打印失败!
如何解决此问题?
Doubt:
问题是因为使用了对话框。或者它是浏览器兼容性问题。
有没有其他方法可以实现这个目标?
我的代码:
myController的
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import java.io.Serializable;
@ManagedBean
@SessionScoped
public class MyController implements Serializable {
private static final long serialVersionUID = 1L;
public void generateOrderList(){
//Generates the List of Ordered Items
RequestContext.getCurrentInstance().execute("printOrderDetails.show();");
}
}
orderDetails.xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:form id="orderForm">
<h:body class="bgcolor">
<p:panel id="printPnl">
<h4>Print Order Details</h4>
<p:row>
<p:column>
<div class="left-panel">
<p:commandButton id="orderListCmdBtn" value="Order List" update=":orderForm:printDialog"
action="#{myController.generateOrderList()}" />
</div>
</p:column>
</p:row>
</p:panel>
<p:dialog id="printDialog" header="Get Print" widgetVar="printOrderDetails">
<div>
<h:commandButton id="printCmdBtn" value="Print" type="button" icon="ui-icon-print" style="width:50px;float:right">
<p:printer target="printListPnl" />
</h:commandButton>
</div>
<p:panel id="printListPnl">
<p:panelGrid id="packingListPnlGrd" styleClass="panelgridTable" style="width:100% !important" >
<p:row>
<p:column styleClass="talign-top" style="width:37%;">
To: <br />#{myController.toAddress}
</p:column>
<p:column styleClass="talign-top" style="width:37%;">
From: <br />#{myController.fromAddress}
</p:column>
</p:row>
</p:panelGrid>
<p:dataTable id="orderDtble" var="order" value="#{myController.orderDetails}" >
<p:columnGroup type="header">
<p:row>
<p:column headerText="Order Name"></p:column>
<p:column headerText="Order"></p:column>
<p:column headerText="Order Date"></p:column>
<p:column headerText="Remark"></p:column>
</p:row>
</p:columnGroup>
<p:column>
<h:outputText id="orderNameOutTxt" value="#{order.name}" />
</p:column>
<p:column>
<h:outputText id="orderIdOutTxt" value="#{order.orderId}" />
</p:column>
<p:column>
<h:outputText id="orderDateOutTxt" value="#{order.orderDate}">
<f:convertDateTime pattern="MM/dd/yyyy" type="date" />
</h:outputText>
</p:column>
<p:column>
<h:outputText id="orderRemarksOutTxt" value="#{order.remarks}" />
</p:column>
</p:dataTable>
</p:panel>
</p:dialog>
</h:body>
</h:form>
</ui:composition>
更新
这就是我在Primefaces中找到改变Jquery版本的方法。 @BalusC
但我仍然不知道为什么<p:printer>
不支持IE9及以上版本,是不是因为JQuery?
已解决:
我解决了这个问题,使用了window.open();
并对window.print();
内容进行了CSS
,需要打印并被{{1}}文件忽略。然后我的打印目的就解决了
但我对这个问题的回答不是那个!我在找哪个?
答案 0 :(得分:0)
我的建议是篡改被发送到页面的HTTPHeader
。
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" > <!--Top of Page in head-->
如果edge
不起作用,请尝试模拟不同版本的IE(例如 EmulateIE7 ),我遇到与inputCalendar
相同的问题。