【问题标题】:JSF 2 Ajax requests fail on IE 9JSF 2 Ajax 请求在 IE 9 上失败
【发布时间】:2023-03-12 05:13:01
【问题描述】:

我最近尝试在 IE9 上测试我的 JSF 应用程序,发现所有 Ajax 请求都失败并出现 MalformedXML 异常,在尝试访问 removeChild 属性时抱怨未定义对象。我观察到 MyFaces 2.0.5 和 mojarra 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;
    }
}

【问题讨论】:

    标签: ajax jsf jsf-2 internet-explorer-9


    【解决方案1】:

    无法在 Tomcat 7.0.12 上使用 Mojarra 2.1.1 重现此问题。

    您的问题是由其他原因引起的。我怀疑在你的真实代码中不正确地使用了动态 id,就像你对#{testBean.idDiv} 所做的那样。用固定的 id 试试(你为什么要把它变成动态的?)

    此外,&lt;h:outputScript&gt; 完全是多余的,这个已经默认包含在 JSF 中。去掉它。如果它使问题变得更大,那么它肯定是由其他原因引起的,例如混合了不同 JSF 版本的脏类路径。

    【讨论】:

    • 是的,我想知道那些组件标识符。 id 属性只接受文字(组件不会解析这些表达式)。尽管如此,它们似乎在 Facelets 中的树创建时被解决和强制。我无法在规范中找到有关此事的任何内容。
    • @McDowell:是的,这种支持是 JSF2 中的新功能。
    • 我只是面临同样的问题,但使用 Mojarra 2.0.2 和 IE9。这必须是 McDowells 答案中引用的 Mojarra issue。该问题同时在 Mojarra 2.1 中得到修复。但是2.0.2版本应该怎么处理呢?
    【解决方案2】:

    看起来像 Mojarra 问题 JAVASERVERFACES-1981

    【讨论】:

    • 就是这样。为了避免更改 JSF 版本,我使用了显式导入的已修补 jsf.js。谢谢。
    • 非常感谢,它拯救了我的一天。从 2.0.21 升级到 2.2.8,它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2018-11-30
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多