Xpages getItemValueInteger异常消息

Xpages getItemValueInteger异常消息,xpages,xpages-ssjs,Xpages,Xpages Ssjs,OpenLogger向me提供以下错误: 表达式语言解释异常错误:方法 NotesXPDocument.getItemValueInteger(数字)未找到,或非法 参数-chkReview上的错误: 解释异常 错误:找不到方法NotesXPDocument.getItemValueInteger(数字), 或非法参数 组件chkReview只有两行,其中使用了getItemValueInteger,这在onClick事件上(单个复选框): compositeData.reviewTeam和co

OpenLogger向me提供以下错误:

表达式语言解释异常错误:方法 NotesXPDocument.getItemValueInteger(数字)未找到,或非法 参数-chkReview上的错误:

解释异常

错误:找不到方法NotesXPDocument.getItemValueInteger(数字), 或非法参数

组件chkReview只有两行,其中使用了getItemValueInteger,这在onClick事件上(单个复选框):

compositeData.reviewTeam和compositeData.section都返回字符串。因此,我不确定我是否有隧道视觉,但是,我看不出我的代码有什么问题?有人能指出正确的方向吗?如果这有帮助,请在下面堆叠跟踪,并附上完整的onClick代码,谢谢:

try{
    var strCurrVal = getComponent('txtReviewSummary').getValue();
    var strNewVal ="";
    var strText ="";
    var dt = new Date();
    var strUser = userBean.getDisplayName();
    var reviewField:string = "numberOfReviewQuestions"+compositeData.reviewTeam;
    var currentNumberReview = document1.getItemValueInteger(reviewField);   
    var sectionReview:string = compositeData.section + compositeData.reviewTeam;    
    var currentNumberSection = document1.getItemValueInteger(sectionReview);

if (getComponent('chkReview').getValue() == "true") {
    // checkbox selected - do something
    var dateTimeFormat = new java.text.SimpleDateFormat("dd/MM/yyyy kk:mm");
    var dateTimeString = dateTimeFormat.format(dt);
    var strReview = " - [Review] - ("+dateTimeString+" - " + strUser + ")";
    strNewVal = strCurrVal+strReview;
    strText = "Review complete for " + compositeData.fieldName;
    document1.replaceItemValue(reviewField, currentNumberReview-1); 
} else {
    // checkbox not selected- do something else
    strNewVal = @Left(strCurrVal, " - [Review]");
    strText = "Removed review for " + compositeData.fieldName + ". Previous value was: " + strNewVal;
    document1.replaceItemValue(reviewField, currentNumberReview+1); 
}

var arrNotes:array = AddNoteItem(currentDocument, dt, strText, strUser);
document1.replaceItemValue(concatReviewSummary, strNewVal);
document1.save();

}catch(e){
    openLogBean.addError(e,this.getParent());
}


> com.ibm.jscript.InterpretException: Interpret exception at
> com.paulwithers.openLog.OpenLogErrorHolder.getInterpretException(OpenLogErrorHolder.java:114)
> at
> com.paulwithers.openLog.OpenLogErrorHolder.addError(OpenLogErrorHolder.java:216)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
> at java.lang.reflect.Method.invoke(Method.java:508) at
> com.ibm.jscript.types.JavaAccessObject.call(JavaAccessObject.java:322)
> at com.ibm.jscript.types.FBSObject.call(FBSObject.java:161) at
> com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:197) at
> com.ibm.jscript.ASTTree.ASTTry.interpretCatch(ASTTry.java:150) at
> com.ibm.jscript.ASTTree.ASTTry.interpret(ASTTry.java:113) at
> com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119) at
> com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139) at
> com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)
> at com.ibm.jscript.JSExpression.access$1(JSExpression.java:424) at
> com.ibm.jscript.JSExpression$2.run(JSExpression.java:414) at
> java.security.AccessController.doPrivileged(AccessController.java:730)
> at
> com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)
> at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251)
> at com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)
> at
> com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:222)
> at
> com.ibm.xsp.binding.javascript.JavaScriptMethodBinding.invoke(JavaScriptMethodBinding.java:111)
> at
> com.ibm.xsp.application.ActionListenerImpl.processAction(ActionListenerImpl.java:60)
> at javax.faces.component.UICommand.broadcast(UICommand.java:324) at
> com.ibm.xsp.component.UIEventHandler.broadcast(UIEventHandler.java:366)
> at
> com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
> at
> com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
> at
> com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
> at
> com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
> at
> com.ibm.xsp.component.UIDataPanelBase.broadcast(UIDataPanelBase.java:400)
> at
> com.ibm.xsp.component.UIViewRootEx.broadcast(UIViewRootEx.java:1535)
> at
> javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:307)
> at
> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:428)
> at
> com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:94)
> at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
> at
> com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:96)
> at
> com.ibm.xsp.controller.FacesControllerImpl.execute(FacesControllerImpl.java:256)
> at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:227)
> at
> com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
> at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:159) at
> com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138) at
> com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
> at
> com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:588)
> at
> com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
> at
> com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:865)
> at
> com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:808)
> at
> com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:577)
> at
> com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)
> at
> com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
> at
> com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
> at
> com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
> at
> com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
> at
> com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
> Caused by: java.lang.Throwable: Error:Method
> NotesXspDocument.getItemValueInteger(number) not found, or illegal
> parameters at
> com.paulwithers.openLog.OpenLogErrorHolder.getInterpretException(OpenLogErrorHolder.java:113)
> ... 52 more

很可能是时间问题。假设XPage上的所有内容都在一个过程中处理是错误的,因此如果它在XPage上,它必须存在。
compositeData
变量在您尝试使用它时可能尚未设置。通过打印出值来确认。另一种可能性较小的情况是
document1
尚未初始化。同样,您可以通过调用标准的非参数化方法(
getNoteID()
可能会起作用)来检查代码是否正确。

与Paul略有不同(尽管他可能是正确的),XPage runtime将reviewField或sectionReview的组成解释为一个数字,并试图找到一个方法“getItemValueInteger”使用数字参数运行的

我将重点关注以下几点:

var sectionReview:string = compositeData.section + compositeData.reviewTeam;
因为另一个似乎是明确的字符串;请记住“:string”是提示,而不是契约,因此您可能希望强制将compositeData.section和compositeData.reviewTeam的组合强制为字符串

例如:

var reviewField:string = "numberOfReviewQuestions"+compositeData.reviewTeam;
var currentNumberReview = document1.getItemValueInteger(@Text(reviewField));
var sectionReview:string = compositeData.section + compositeData.reviewTeam;    
var currentNumberSection = document1.getItemValueInteger(@Text(sectionReview));

对于我来说,当compositeData不可用时,我会在类似的结构中得到空指针异常,而不是数据类型错误。同样,如果document1不可用或未初始化,则错误通常不是方法调用错误,而是document1为null或不是对象。

谢谢,我明天可能会尝试此操作-需要注意的一点是,var sectionReview:string=compositeData.section+compositeData.reviewTeam;但似乎工作正常,因为字段存储在我的文档中,例如“section3PITeam”,还存储一个数字,字段类型为number/integer。它似乎也没有阻止我的xpage上发生任何事情,就像在中一样,一切似乎都正常,同时它记录了错误在生命周期的某个特定阶段可能是一个不好的“状态”——这意味着my和Paul的答案的某种混合。我被这烧了。在页面呈现和重新计算期间,许多事情会多次运行,并且并非所有变量在每个周期都可用。我经常包装“改变”文档的执行,以便它们在计算期间只运行一次(viewScope或requestScope闩锁,等等)。
var reviewField:string = "numberOfReviewQuestions"+compositeData.reviewTeam;
var currentNumberReview = document1.getItemValueInteger(@Text(reviewField));
var sectionReview:string = compositeData.section + compositeData.reviewTeam;    
var currentNumberSection = document1.getItemValueInteger(@Text(sectionReview));