问题 如何正确访问a4j:jsFunction结果中的数据字段


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

以下是启动它的按钮的XHTML:

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

和javascript,其中一部分是按钮调用,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 boolean)。我在这做错了什么?


3418
2017-09-02 01:36


起源



答案:


虽然这是一个非常古老的问题,但我对Richfaces 4 M3也有同样的问题。 Yev建议的Parameteres不起作用。所以提到richfaces的 JIRA。 根据它,它是一个bug(它处于“不会修复”模式,不知道为什么!) 所以目前解决方法是使用 event.data 代替 data 在里面 oncomplete 处理程序。 我测试过它确实有效:)


12
2018-02-24 10:04



这是迄今为止我最热门的问题。我猜很多人都有这个问题。欢呼寻找变通方法,并感谢分享! - Ben
你很受欢迎:)确实这是一个非常普遍的问题!我想知道为什么JBoss社区不会在一个地方记录这样的问题。 - Nikhil
为什么不将它包含在他们的迁移指南中?这对我帮助很大,谢谢。没有固定在4.1 - Toskan
谢谢, event.data 工作:) - Petar Minchev


答案:


虽然这是一个非常古老的问题,但我对Richfaces 4 M3也有同样的问题。 Yev建议的Parameteres不起作用。所以提到richfaces的 JIRA。 根据它,它是一个bug(它处于“不会修复”模式,不知道为什么!) 所以目前解决方法是使用 event.data 代替 data 在里面 oncomplete 处理程序。 我测试过它确实有效:)


12
2018-02-24 10:04



这是迄今为止我最热门的问题。我猜很多人都有这个问题。欢呼寻找变通方法,并感谢分享! - Ben
你很受欢迎:)确实这是一个非常普遍的问题!我想知道为什么JBoss社区不会在一个地方记录这样的问题。 - Nikhil
为什么不将它包含在他们的迁移指南中?这对我帮助很大,谢谢。没有固定在4.1 - Toskan
谢谢, event.data 工作:) - Petar Minchev


我完全按照你的设置,它适用于我。唯一的区别是,我在jsFunction上有额外的属性:

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

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


2
2017-07-09 20:44





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


1
2017-09-08 10:54