![](/img/trans.png)
[英]f:ajax restricting the listener method call based on onevent return value
[英]Boolean value not updating when using f:ajax onevent
選擇一個選項后,它將觸發控制器中的方法調用,該方法將更改regionController.invalidRegion值(從true到false,反之亦然)。 問題是第一次更改后,該值不再在客戶端更新,而是在服務器端正確更改。
我有以下js;
var renderRegionMsg = function(val){
if(val === "true"){
alert("true");
document.getElementById("NavForm:regionform:notInRegion").style.visibility = "";
}
else{
alert("false");
document.getElementById("NavForm:regionform:notInRegion").style.visibility = "hidden";
}
};
和以下jsf代碼:
<h:selectOneMenu id="regionSelect" >
<f:selectItems ...... />
<f:ajax
id="regionListener"
listener="#{geoListProducer.changeRegion}"
render="stripe-provState"
onevent="renderRegionMsg('#{regionController.invalidRegion}')" />
</h:selectOneMenu>
<h:panelGroup id="notInRegion">
<h:outputText class="red_bold" value="#{userController.invalidRegionMsg}" />
</h:panelGroup>
您沒有以正確的方式使用<f:ajax onevent>
。 onevent
屬性應引用函數引用,而不包含像通常在onclick
和friends上使用的內聯腳本。 <f:ajax>
將使用隱式data
參數調用函數引用三次。 在發送ajax請求之前一次,在到達ajax響應之后一次,以及在基於ajax響應更新HTML DOM之后一次。
這是正確用法的啟動示例:
function functionName(data) {
var status = data.status; // Can be "begin", "complete" or "success".
var source = data.source; // The parent HTML DOM element.
switch (status) {
case "begin": // Before the ajax request is sent.
// ...
break;
case "complete": // After the ajax response is arrived.
// ...
break;
case "success": // After update of HTML DOM based on ajax response.
// ...
break;
}
}
聲明如下:
<f:ajax ... onevent="functionName" />
在您的特定情況下 ,您可能需要以下方法:
function renderRegionMsg(data) {
if (data.status == "success") {
var val = data.source.value;
if (val === "true") {
alert("true");
document.getElementById("NavForm:regionform:notInRegion").style.visibility = "";
}
else {
alert("false");
document.getElementById("NavForm:regionform:notInRegion").style.visibility = "hidden";
}
}
}
同
<f:ajax ... onevent="renderRegionMsg" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.