我有一个基于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上运行?
由于
卢卡
答案 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;答案: