对话框中的Primefaces <p:printer>在IE中不起作用?</p:printer>

时间:2014-05-16 06:03:30

标签: internet-explorer jsf primefaces internet-explorer-9

我正在使用JSF 2.0,Primefaces 3.5&amp; 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}&nbsp;
                </p:column>
                <p:column styleClass="talign-top" style="width:37%;">
                    From: <br />#{myController.fromAddress}&nbsp;
                </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}}文件忽略。然后我的打印目的就解决了

但我对这个问题的回答不是那个!我在找哪个?

1 个答案:

答案 0 :(得分:0)

我的建议是篡改被发送到页面的HTTPHeader

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" > <!--Top of Page in head-->

如果edge不起作用,请尝试模拟不同版本的IE(例如 EmulateIE7 ),我遇到与inputCalendar相同的问题。