jsf.ajax.request无法在Firefox上运行

时间:2013-07-25 09:59:30

标签: ajax jsf firefox

我有一个基于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');在firefox上工作?

由于

Lucaf:视图&gt;     

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

  

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

功能似乎不起作用。

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

  

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

无法在Firefox上运行?

由于

卢卡

1 个答案:

答案 0 :(得分:1)

它根本不应该在Chrome中运行。这可能是由于误解造成的。也许请求实际上是发送的,但即使这样,它也不会在服务器端做任何有用的事情。您在<f:ajax>上没有任何可以解码<h:inputHidden>的{​​{1}}。

抛弃这种笨拙的黑客/变通办法。由于您已经在使用PrimeFaces,只需抓住jsf.ajax.request()showcase example here)即可。

<p:remoteCommand>

<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"); // ... } 的确如何运作,请转到以下相关问题&amp;答案: