script5009:IE9中未定义'Primefaces' - 重新加载后错误消失

时间:2012-11-28 14:07:55

标签: internet-explorer jsf primefaces

我非常失望。我仍然在寻找一个错误的原因,我改变了我的页面的模板布局后得到了。我正在使用Primefaces 3.4.2和Tomcat 7.0.32以及JSF 2.1.13库。

这个错误是什么?:

在Opera,FF和Chrome中

所有元素都已完全加载并显示。

但是如果您选择或调用menuitem(定义的非ajax),页面将按预期重新加载。但没有任何反应。如果您在一段时间内调用该按钮,则会调用该按钮。内容部分已更改。

如果选择数据表或类似的行,页面工作非常顺利。而且您无需再次尝试更改内容部分。

在IE6 +中尤其是IE9:

页面已加载,IE9在大多数情况下显示所有元素。但是你可以调用没有悬停或ajax事件。页面似乎被冻结了。

您是否重新加载页面,它按预期工作。快速而顺利。

我做了什么调试

我开始找到它的原因。我查看了每个浏览器的控制台。非IE浏览器没有给出任何提示。在大多数情况下,这方面没有错误。

如果你开始一个新的会话并且你是第一次加载页面,那么IE会说以下错误。

IE CONSOLE

重新加载后,错误消失。

tomcat也没有例外。

我对布局做了什么:

我使用JQuery ThemeRoller创建一个自定义主题并将其实现为链接。 注意:如果您使用默认主题

,则Bug仍然存在

我决定删除左侧的<p:menu>并将其移至标题中。 注意:我将所有内容更改为默认值,错误仍然存​​在。

我删除了所有<p:panelgrid>元素并将其切换为简单<table> s 注意:但我认为不是这就是错误的原因。

我需要在IE浏览器中添加并修复z-index的已知问题。您可以在layout.xhtml的脚本部分中看到它 - 没有它,菜单栏位于内容部分中元素的背景中。 注意:我删除它没有任何反应,错误仍然存​​在。

我删除了所有缓存。但没什么。我希望有人可以帮助我或找到我犯的错误。

[来源文件]

我的模板布局文件= layout.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <f:view contentType="text/html">
        <h:head>
            <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
            <meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=#{request.contextPath}" />
            <f:event listener="#{loginController.verifyUseLogin()}" type="preRenderView" />

            <link type="text/css" rel="stylesheet" href="#{request.contextPath}/faces/resources/primefaces-fes/theme.css"/>
            <link type="text/css" rel="stylesheet" href="#{request.contextPath}/faces/resources/css/app.css"/>


            <title>Willkommen im FLOW / Fast Lean Overhead Workflow - Dies ist ein PROTOTYP</title>
            <script type="text/javascript">

                PrimeFaces.locales['de'] = {
                    closeText: 'Schließen',
                    prevText: 'Zurück',
                    nextText: 'Weiter',
                    monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],
                    monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
                    dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
                    dayNamesShort: ['Son', 'Mon', 'Die', 'Mit', 'Don', 'Fre', 'Sam'],
                    dayNamesMin: ['S', 'M', 'D', 'M ', 'D', 'F ', 'S'],
                    weekHeader: 'Woche',
                    firstDay: 1,
                    isRTL: false,
                    showMonthAfterYear: false,
                    yearSuffix: '',
                    timeOnlyTitle: 'Nur Zeit',
                    timeText: 'Zeit',
                    hourText: 'Stunde',
                    minuteText: 'Minute',
                    secondText: 'Sekunde',
                    currentText: 'Aktuelles Datum',
                    ampm: false,
                    month: 'Monat',
                    week: 'Woche',
                    day: 'Tag',
                    allDayText: 'Ganzer Tag'
                };

                //needed to get the Submenu in menubar to the front (z-index bug)
                $(function() {
                        var zIndexNumber = 1000;
                        // Put your target element(s) in the selector below!
                        $("div").each(function() {
                                $(this).css('zIndex', zIndexNumber);
                                zIndexNumber -= 10;
                        });
                 });

            </script>            
        </h:head>
        <h:body>
            <div id="outerWrapper">

                <table id="contentWrapper">
                    <tr>
                        <td id ="header">
                            <ui:insert name="header"/>
                        </td>
                    </tr>
                    <tr>
                    <td id="content">
                        <ui:insert name="content"/>
                    </td>
                    </tr>
                </table>
            </div>
        </h:body>
    </f:view>
</html>

app.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition template="./layout/layout.xhtml"
                xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:define name="header">
        <ui:include src="./misc/menuheader.xhtml"/>
    </ui:define>

    <ui:define name="content">
        <ui:include src="#{appController.content}.xhtml" />
    </ui:define>

</ui:composition>

来自@ManagedBean - @SessionScoped Bean的导航方法:

public void doNav(){

    FacesContext context = FacesContext.getCurrentInstance();
    String selectedPageViewId =
    context.getExternalContext().getRequestParameterMap().get("pageViewID");

    if (selectedPageViewId.equalsIgnoreCase("page1"))
    {
    content = "/app/includes/hldyplanning";
    message = "Urlaub eintragen";
    ELContext elContext = FacesContext.getCurrentInstance().getELContext();
    hplC = (HldyPlanningController) FacesContext.getCurrentInstance().getApplication()
                    .getELResolver().getValue(elContext, null, "hldyPlanningController");
    hplC.init();
    }
    else if (selectedPageViewId.equalsIgnoreCase("page2"))
    {
    message = "persönliche Übersicht";
    content = "/app/includes/persview";
    } [...]        
    else { context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Seite nicht gefunden.", "Wie sind Sie hier hingekommen?")); }
}

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core">

    <h:form id="frm_plan">
        <p:messages id="messages" autoUpdate="false" closable="true"/>
        [...]
    </h:form>
</html>

标题:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 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="frm_menu">
        <table class="steamlessBody" style="width:100%;">
            <tr>
                <td class="header_boxes" style="width: 200px;">
                    #{appController.message}
                </td>
                <td class="header_boxes" style="width: 650px;">
                    <p:menubar autoDisplay="true" style="font-size: 14px; border: none; background: none;">
                        <p:submenu id="sub1" icon="ui-icon-calendar" label="Urlaubsplanung">
                            <p:menuitem id="btn_page1" ajax="false" icon="ui-icon-plusthick" value="Urlaub eintragen" action="#{appController.doNav()}">
                                <f:param id="pageHLDYPLANNING" name="pageViewID" value="page1"/>
                            </p:menuitem>
                            [...]
                        </p:submenu>
                        [...]
                        <p:menuitem id="btn_logout" ajax="false" icon="ui-icon-circle-close" value="Ausloggen" action="#{appController.logout()}"/>
                    </p:menubar>
                </td>
                <td class="head_text">
                    Eingeloggt als #{loginController.sessionData.user_name}
                </td>
            </tr>
        </table>
        <p:dialog widgetVar="help" id="dlg_help" closable="true" header="Hilfe" modal="true" showEffect="clip" hideEffect="clip">

        </p:dialog>
    </h:form>
</html>

2 个答案:

答案 0 :(得分:3)

今天我遇到了类似的问题。问题结果是指向有问题的页面的链接。

我的代码类似于:

<p:commandLink action="badPage.jsf" id="btnBadPage" 
    value="Bad Page" actionListener="#{myBean.someAction}" />

当我按如下方式更改操作URL时,我停止接收IE中的javascript错误:

<p:commandLink action="badPage.xhtml?faces-redirect=true" id="btnBadPage" 
    value="Bad Page" actionListener="#{myBean.someAction}" />

答案 1 :(得分:0)

我只是将任何有问题的组件包装在<div>标签中,并且这些类型的错误通常会消失(当它们发生时)。

例如,我遇到了<p:dataTable>中的分页问题,​​直到我将其封装在<div>中才能解决问题。之后,它奏效了。

无论如何,这是别人尝试的东西。