使用侦听器更改的值执行onevent

时间:2015-06-05 07:21:25

标签: javascript ajax jsf

我有这段代码

<h:commandLink>
    <f:ajax execute="@this"
            render=":organizerTable :organizerData :delete @form" 
            onevent="deleteOrganizer"
            listener="#{organizercontroller.deletePossible}"/>

    <span id="minus" class="add-on glyphicon glyphicon-minus" aria-hidden="true"></span>  
</h:commandLink>

当我点击减号时,应该在onevent之前执行ajax标签的监听器。通常,情况正好相反。

我试过了:

function deleteOrganizer(data) {
    var status = data.status;
    if (status === 'complete') {
        if (#{organizercontroller.canDelete}) {
             alert("Value: " + #{organizercontroller.canDelete});
             window.location.href = "#id_delete_popup";
            }
        else {
            alert("false");
        }
    }
 }

现在,侦听器方法将在我的JavaScript函数之前执行,但在#{organizercontroller.deletePossible}中,我更改canDelete的值,当我读取它时,此值不正确。

我该如何解决这个问题?

更新:

使用status === 'success'也无效。

1 个答案:

答案 0 :(得分:1)

我似乎找不到在不使用PrimeFaces或OmniFaces Ajax

的情况下在ajax调用中添加回调参数的链接/帖子

但你总是可以做一些事情,比如更新包含javascript函数的页面的一部分,你在ajax调用中更新并包含/返回EL

<h:commandLink>
    <f:ajax execute="@this"
            render=":organizerTable :organizerData :delete @form myCallback" 
            onevent="deleteOrganizer"
            listener="#{organizercontroller.deletePossible}"/>

    <span id="minus" class="add-on glyphicon glyphicon-minus" aria-hidden="true"></span>  
</h:commandLink>
<ui:fragment id="myCallback">
    function myFunction() {
        return #{organizercontroller.deletePossible}
    }
</ui:fragment>

并在你的ajax响应处理程序中调用该函数

function deleteOrganizer(data) {
    var status = data.status;
    if (status === 'complete') {
        if (myFunction()) {
             alert("Value: " + myFunction());
             window.location.href = "#id_delete_popup";
            }
        else {
            alert("false");
        }
    }
}