JSF 2 Ajax-запросы терпят неудачу на IE 9 - PullRequest
3 голосов
/ 10 мая 2011

Недавно я попытался протестировать свое JSF-приложение на IE9 и обнаружил, что все Ajax-запросы не выполняются; исключение MalformedXML приводит к жалобе на неопределенный объект при попытке доступа к атрибуту removeChild. Я наблюдал проблемы как с MyFaces 2.0.5, так и с мохаррой 2.1.1. Существуют ли какие-либо известные ограничения или предпосылки для поддержки IE 9?

Чтобы воспроизвести проблему, я прибил ее к простому тестовому примеру, состоящему из одного запроса ajax:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">
    <f:view  contentType="text/html">
    <h:head>
        <h:outputScript name="jsf.js" library="javax.faces" target="head"/>    
    </h:head>
    <h:body>
        <h:form id="#{testBean.idForm}">
                <h1>Test of IE9 Ajax</h1>
                <h:panelGroup id="#{testBean.idDiv}" layout="block">
                    Text: <h:outputText value="#{testBean.text}"/>
                    <br/>
                    <h:commandLink 
                        action="#{testBean.onAction}"
                        value="click me">
                        <f:ajax render="#{testBean.idDiv}"/>
                    </h:commandLink>
                </h:panelGroup>
            </h:form>
        </h:body>
    </f:view>
</html>

Боб

package ietest;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

@ManagedBean
@SessionScoped
public class TestBean {
        private int clickCount;   
        private String idForm="testForm";
        private String idDiv="testDiv";

        public String getText(){
        String text = "you clicked " + clickCount +" times";
        System.out.println("Return text " + text);
        return text;
    }

    public String onAction(){
        System.out.println("onAction invoked");
        clickCount++;
        return "iebug";
    }

    public String getIdDiv() {
        return idDiv;
    }

    public String getIdForm() {
        return idForm;
    }
}

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

Похоже, проблема Мохарры JAVASERVERFACES-1981 .

2 голосов
/ 10 мая 2011

Невозможно воспроизвести эту проблему с помощью Mojarra 2.1.1 на Tomcat 7.0.12.

enter image description here

Ваша проблема вызвана чем-то другим.Я подозреваю в вашем реальном коде неверное использование динамических идентификаторов, как у вас с #{testBean.idDiv}.Попробуйте его с фиксированными идентификаторами (зачем вам это делать динамически?)

Кроме того, <h:outputScript> совершенно лишний, этот по умолчанию уже включен в JSF.Убери это.Если это увеличивает проблему, то это определенно вызвано чем-то другим, например, грязным путем к классу разных версий JSF, смешанных вместе.

...