【问题标题】:jsf.ajax.request not work on Firefoxjsf.ajax.request 在 Firefox 上不起作用
【发布时间】:2013-07-25 09:59:30
【问题描述】:

我有一个基于 JSF 2.1 和 Primefaces 的应用程序。 我需要使用 Jquery 发出 ajax 请求并更新页面状态。 代码如下:

    <?xml version="1.0"?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:view>
        <h:head>
        </h:head>
        <h:body>
            <h:outputText id="counterViewer" value="#{dataController.outputMessage}"
                          styleClass="counter-viewer" />
            <h:form id="dataForm" >
                <h:outputScript>
                    jQuery(document).ready(function() {
                        jQuery(document).on("count", function(event, count) {
                            alert( "Count: " + count );
                            document.getElementById("#{view.getClientId(facesContext)}:counterViewer").innerText = count;   
                            var hiddenCountValue = document.getElementById("#{view.getClientId(facesContext)}:dataForm:hiddenCountValue");
                            hiddenCountValue.value = count;
                            jsf.ajax.request(hiddenCountValue, 'change');
                        });
                     });
                </h:outputScript>
                <h:inputHidden id="hiddenCountValue" value="#{dataController.outputMessage}"/>
            </h:form>
        </h:body>
    </f:view>
</html>

当我使用 Chrome 时一切正常,但在 firefox 22 上 jsf.ajax.request(hiddenCountValue, 'change');功能不起作用。

还有其他功能可以用来在 Firefox 上运行我的代码吗? 为什么 jsf.ajax.request(hiddenCountValue, 'change');在火狐上工作?

谢谢

卢卡夫:视图>

当我使用 Chrome 时,everithyngs 工作正常,但在 firefox 上

jsf.ajax.request(hiddenCountValue, 'change');

功能似乎不起作用。

我可以使用其他函数来使我的代码更兼容吗? 为什么

jsf.ajax.request(hiddenCountValue, 'change');

不能在 Firefox 上运行?

谢谢

卢卡

【问题讨论】:

    标签: ajax jsf firefox


    【解决方案1】:

    它也不应该在 Chrome 中工作。这很可能是由于误解造成的。也许请求实际上是发送的,但即便如此,它也不会在服务器端做任何有用的事情。您即在&lt;h:inputHidden&gt; 上没有任何&lt;f:ajax&gt; 可以解码jsf.ajax.request()

    扔掉这种笨拙的破解/变通方法尝试。由于您已经在使用 PrimeFaces,只需抓住它的 &lt;p:remoteCommand&gt; (showcase example here)。

    <h:form>
        <p:remoteCommand name="sendCount" process="@this" action="#{bean.processCount}" />
    </h:form>
    <h:outputScript target="body">
        $(document).on("count", function(event, count) {
            $(".counter-viewer").text(count);
            sendCount([{ name: "count", value: count }]);
         });
    </h:outputScript>
    

    public void processCount() {
        String count = FacesContext.getCurrentInstance().getRequestParameterMap().get("count");
        // ...
    }
    

    要了解 jsf.ajax.request 的实际工作原理,请参阅以下相关问题和答案:

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2021-11-04
      相关资源
      最近更新 更多