12

我目前正在尝试使用一些服务器端方法(作为一个组)验证一些前端值,并且遇到了处理结果的问题。

这是启动它的按钮的 XHTML:

<h:commandButton action="#{Bean.save()}" 
        value="Save" 
           id="save" 
      onclick="checkForConfirmation();" />

还有javascript,一部分是button调用,另一部分是jsFunction调用

function checkForConfirmation()
{
         var name = document.getElementById("path:to:name").value;
         var address = document.getElementById("path:to:address").value;
         var city = document.getElementById("path:to:city").value;
         var state = document.getElementById("path:to:state").value;
         var zip = document.getElementById("path:to:zip").value;

         jsFunc1(name, address, city, state, zip);
}
function showConfirmPrompt()
{
            if(confirm('Confirmation before save')) 
            {
                return true;
            }

            return false; 
}

最后,jsFunction 是有问题的部分:

<a4j:form>
        <a4j:jsFunction name="jsFunc1" action="#{Bean.shouldBeConfirmed()}" data="#{Bean.booleanResult}" oncomplete="alert(data); if (data) {showConfirmPrompt();}">
            <a4j:actionparam name="param1" assignTo="#{Bean.nameToBeValidated}"/>
            <a4j:actionparam name="param2" assignTo="#{Bean.addressToBeValidated}"/>
            <a4j:actionparam name="param3" assignTo="#{Bean.cityToBeValidated}"/>
            <a4j:actionparam name="param4" assignTo="#{Bean.stateToBeValidated}"/>
            <a4j:actionparam name="param5" assignTo="#{Bean.zipToBeValidated}"/>
        </a4j:jsFunction>
    </a4j:form>

问题是,在这一系列事件的末尾,“oncomplete”属性中的警报(数据)显示数据未定义。我需要对此进行定义,以便知道是否显示警告对话框。

我可以确认 Bean.shouldBeConfirmed() 方法确实在运行,并且具有正确的参数,并且确实返回了正确的值,甚至设置了 Bean.booleanResult 变量的值(这是一个普通的 java 布尔值)。我在这里做错了什么?

4

3 回答 3

13

虽然这是一个非常古老的问题,但我对 Richfaces 4 M3 也有同样的问题。Yev 建议的参数不起作用。所以提到了richfaces的JIRA。据此,这是一个错误(处于“无法修复”模式,不知道为什么!)所以现在解决方法是使用 event.data 而不是 dataoncomplete处理程序中。我测试过,它确实有效:)

于 2011-02-24T10:04:51.473 回答
2

我的设置与您的设置完全相同,并且对我有用。唯一的区别是,我在 jsFunction 上有额外的属性:

    <a4j:form>
    <a4j:jsFunction name="jsFunc1" 
        action="#{Bean.shouldBeConfirmed()}" 
        data="#{Bean.booleanResult}" 
        oncomplete="alert(data);"
        ignoreDupResponses="true"
        eventQueue="foo">
        ...

我的数据(你的 booleanResult)是一个 int。工作正常。

于 2010-07-09T20:44:52.380 回答
1

我也遇到了同样的问题。如果是布尔结果,我们需要编写完整的方法名称而不是删除 getter ......就像你的情况一样,它应该是#{Bean.isBooleanResult} ....如果遇到问题,请告诉我...

于 2010-09-08T10:54:48.770 回答