【问题标题】:Having trouble using Ajax with JSF on a Tomcat 7.0 server在 Tomcat 7.0 服务器上使用 Ajax 和 JSF 时遇到问题
【发布时间】:2023-03-06 03:11:01
【问题描述】:

在 Ajax 方面,我是一个完全的初学者,但由于某种原因,我无法找到一个简单的示例来工作......

javascript:

var xmlhttp;
function reloadIssues() 
{
    if (window.XMLHttpRequest) 
    {
        xmlhttp = new XMLHttpRequest();
    } 
    else 
    {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange = function() 
    {
        if (xmlhttp.readyState == 4) 
        {
            document.getElementById("tester").innerHTML = xmlhttp.responseText;
        }
    };


    xmlhttp.open("GET", "test.xhtml", true);
    xmlhttp.send();

}

和测试xhtml页面:

<div id="test">
    TEST TEXT
</div>
<button type="button" onclick="reloadIssues()">Change Content</button>

JS文件被调用。

我已经对其进行了一些测试,似乎“xmlhttp.onreadystatechange”始终为空,并且它从未进入其功能。

除了可能是问题的代码之外,还有其他问题吗?也许在tomcat服务器上?

【问题讨论】:

    标签: javascript ajax jsf


    【解决方案1】:

    相关元素的 id 为 test

    <div id="test">
    

    然而你却通过tester找到它

    document.getElementById("tester")
    

    相应地修复它。


    与具体问题无关,在处理 ajax 时,我建议采用体面的框架,而不是自行开发的框架。我可以热情地推荐 jQuery 来做 ajax 工作。然后就很简单了:

    <script src="http://code.jquery.com/jquery-latest.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#change').click(function() {
                $.get('test.xhtml', function(responseText) {
                    $('#test').text(responseText);
                });
            });
        });
    </script>
    
    <body>
        <div id="test">TEST TEXT</div>
        <button id="change">Change content</button>
    </body>
    

    此外,当将 ajax 与基于组件的 MVC 框架(如 JSF)结合使用时,您必须考虑很多因素以保持客户端和服务器端状态同步。我也不建议在家种植。要么升级到内置 ajax 魔法的 JSF 2.0

    <h:form>
        <h:commandButton value="Change content" action="#{bean.change}">
            <f:ajax execute="@form" render=":test" />
        </h:commandButton>
    </h:form>
    <h:panelGroup id="test" layout="block">#{bean.text}</h:panelGroup>
    

    用这个方法

    public void change() {
        this.text = "new text";
    }
    

    或者当您还在使用 JSF 1.x 时,请采用基于 ajax 的组件库,例如 RichFaces、IceFaces、PrimeFaces 等。

    【讨论】:

    • “test”和“tester”在复制粘贴时出错。我不知道 JSF 支持 Ajax,我试了一下,效果很好!感谢您的帮助,谢谢:)
    • JSF 1.2 可以使用 PrimeFaces 吗?我以为它只适用于 JSF 2.0
    • @lkdg:PrimeFaces 是第一个从上到下按照 JSF 2.0 规范设计的组件库。它后来被向后移植到 JSF 1.2。只是现在不再维护了。你可以在这里找到它们:repository.prime.com.tr/org/primefaces/primefaces/1.1
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 2020-05-07
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多