将参数传递给适配器时出现问题

Posted

技术标签:

【中文标题】将参数传递给适配器时出现问题【英文标题】:Issues while passing parameters to Adaptor 【发布时间】:2014-08-17 09:38:06 【问题描述】:

我有一个登录表单,它需要用户名和密码。当用户点击提交按钮时, 调用以下 js 函数。

function getGeoCode()
    var para=[$('#usernameInputField').val()];
    alert("from sql adapter"+para);

    var id = username : para ;
    var invocationData = 
        adapter: "GDMSDbAdaptor",
        procedure: "getGeoCode",
        parameters: [id]
    ;
    alert("before adapter proc call");

    WL.Client.invokeProcedure(invocationData, 
        onSuccess: getMessage,
        onFailure: getMessageOnfailure
    );
    alert("after adapter proc call");

下面的适配器代码在上面的函数之后执行

var procedureStatement = WL.Server.createSQLStatement("SELECT DISP_NUMBER,DISP_STATUS,DISP_CREATE_DATE,CUST_CONT_NAME,DISP_RES_OWNER,DISP_MANAGER FROM GDMW.DISPUTE WHERE DISP_RES_OWNER IN (SELECT USER_CNUM FROM GDMW.USER_ACC_PROFILE WHERE USER_EMAIL=?)");

function getGeoCode(data)  
    var email=data.username; 

    WL.Logger.info("In getGeoCode method"+email);
    return WL.Server.invokeSQLStatement(
        preparedStatement : procedureStatement,
        parameters : [email]
    );

运行上述代码时出现以下错误

[ERROR ] FWLSE0099E: 调用过程时发生错误 [项目GDMSLoginApp]GDMSDbAdaptor/getGeoCodeFWLSE0100E:参数: [项目 GDMSLoginApp] TypeError:找不到默认值 目的。 (C%3A%5Cnewworkspaceworklight%5CGDMSLoginApp%5Cadapters%5CGDMSDbAdaptor/GDMSDbAdaptor-impl.js#22) FWLSE0101E: 由:[项目 GDMSLoginApp]nullorg.mozilla.javascript.EcmaError: TypeError: 不能 找到对象的默认值。 (C%3A%5Cnewworkspaceworklight%5CGDMSLoginApp%5Cadapters%5CGDMSDbAdaptor/GDMSDbAdaptor-impl.js#22)

但如果我硬编码下面的参数(电子邮件 ID),它可以正常工作:

function getGeoCode()
    var para=[$('#usernameInputField').val()];
    alert("from sql adapter"+para);

    var id = username : 'some@email.address' ;
    var invocationData = 
        adapter: "GDMSDbAdaptor",
        procedure: "getGeoCode",
        parameters: [id]
    ;

    alert("before adapter proc call");
    WL.Client.invokeProcedure(invocationData, 
        onSuccess: getMessage,
        onFailure: getMessageOnfailure
    );
    alert("after adapter proc call");

与单引号有关吗?

【问题讨论】:

【参考方案1】:

我的第一个猜测是它正在发生,因为您使用了括号:

var para=[$('#usernameInputField').val()];

当你不应该这样做时:

var para=$('#usernameInputField').val();

你也可以这样做:

var id = username : $('#usernameInputField').val() ;

【讨论】:

以上是关于将参数传递给适配器时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

如何将枚举作为字符串参数传递给 Authorize 属性?

从 rexx 代码向 ispf 宏传递参数时出现无效长度错误

将函数参数传递给oracle中的游标

MobileFirst:如何使用 angularJS 将参数传递给适配器

DataTables 警告:表 id=users - Ajax 错误。使用 jquery 将参数传递给它时

在 PyQt5 中将参数传递给 QThread 子类时出错