Сообщение об исключении getItemValueInteger

#xpages #xpages-ssjs

#xpages #xpages-ssjs

Вопрос:

OpenLogger выдает мне следующую ошибку:

Язык выражения интерпретирует ошибку исключения: Метод NotesXspDocument.getItemValueInteger (номер) не найден или недопустимые параметры — Ошибка в chkReview:

Интерпретировать исключение

Ошибка: Метод NotesXspDocument.getItemValueInteger (номер) не найден или недопустимые параметры

Компонент chkReview содержит только 2 строки, где используется getItemValueInteger, который находится в событии onClick (одиночный флажок):

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

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
  

Ответ №1:

Немного иначе, чем у Пола (хотя он может быть прав), среда выполнения XPage интерпретирует состав 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 равен нулю или не является объектом.

Комментарии:

1. Спасибо, я могу попробовать это завтра — Следует отметить одну вещь, var sectionReview:string = CompositeData.section CompositeData.reviewTeam; похоже, работает так, как ожидалось, поскольку поле хранится в моем документе, например «section3PITeam», а также хранит число, тип поля — number / integer. Похоже, что это также ничего не останавливает на моей xpage, например, все по-прежнему работает, пока регистрируется ошибка

2. Может быть плохое «состояние» в течение одного конкретного сегмента жизненного цикла, что подразумевает некоторое сочетание моего ответа и ответа Пола. Def был сожжен этим. Многие вещи запускаются несколько раз во время рендеринга страницы и пересчитываются, и не все переменные доступны во время каждого цикла. Я часто завершаю выполнение, которое «видоизменяет» документ, так что они будут выполняться только один раз во время вычисления (viewScope или RequestScope latch и т.д.).

Ответ №2:

Скорее всего, это проблема с синхронизацией. Неверно предположение, что все на вашей XPage обрабатывается за один проход, поэтому, если это есть на XPage, оно должно существовать. compositeData Переменная, вероятно, не была установлена во время, когда вы пытаетесь ее использовать. Подтвердите это, распечатав значение. Другой сценарий, менее вероятный, document1 еще не инициализирован. Опять же, вы можете проверить это в своем коде, вызвав стандартный непараметризованный метод ( getNoteID() может сработать).