1

我有一个基于 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, '改变');

功能似乎不起作用。

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

jsf.ajax.request(hiddenCountValue, '改变');

不能在火狐上工作?

谢谢

卢卡

4

1 回答 1

1

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

扔掉这个笨拙的黑客/解决方法尝试。由于您已经在使用 PrimeFaces,因此只需抓住它<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");
    // ...
}

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

于 2013-07-25T13:15:55.857 回答