Xpages - Проблема: 'context.getUser().getCommonName()' имеет значение null

Кто-нибудь еще заметил эту проблему:

'context.getUser().getCommonName()' имеет значение null

Я получаю эту проблему на одном конкретном сервере, но не могу воспроизвести ее на других серверах.

Любая помощь будет оценена по достоинству.

Вот трассировка стека проблемы:

com.ibm.xsp.exception.EvaluationExceptionEx: Error while executing JavaScript computed expression
    com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:132)
    javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:451)
    com.ibm.xsp.component.UIDataPanelBase.isRenderedProp(UIDataPanelBase.java:81)
    com.ibm.xsp.component.UIDataPanelBase.fillShadowedFlags(UIDataPanelBase.java:231)
    com.ibm.xsp.component.UIDataPanelBase.encodeBegin(UIDataPanelBase.java:240)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:840)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1317)
    com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)
    com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:641)
    com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:320)
    com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:335)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
    com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:264)
    com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:248)
    com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:200)
    com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
    com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:137)
    com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
    com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
    com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1267)
    com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847)
    com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
    com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
    com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1251)
    com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:598)
    com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:421)
    com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)
    com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)
    com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
com.ibm.jscript.InterpretException: Script interpreter error, line=1, col=35: 'context.getUser().getCommonName()' is null
    com.ibm.jscript.InterpretException.<init>(InterpretException.java:123)
    com.ibm.jscript.ASTTree.ASTMember.interpret(ASTMember.java:97)
    com.ibm.jscript.ASTTree.ASTCall.interpret(ASTCall.java:88)
    com.ibm.jscript.ASTTree.binaryop.ASTBinaryDefaultOp.interpret(ASTBinaryDefaultOp.java:49)
    com.ibm.jscript.ASTTree.ASTProgram.interpret(ASTProgram.java:119)
    com.ibm.jscript.ASTTree.ASTProgram.interpretEx(ASTProgram.java:139)
    com.ibm.jscript.JSExpression._interpretExpression(JSExpression.java:435)
    com.ibm.jscript.JSExpression.access$1(JSExpression.java:424)
    com.ibm.jscript.JSExpression$2.run(JSExpression.java:414)
    java.security.AccessController.doPrivileged(AccessController.java:284)
    com.ibm.jscript.JSExpression.interpretExpression(JSExpression.java:410)
    com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:251)
    com.ibm.jscript.JSExpression.evaluateValue(JSExpression.java:234)
    com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:221)
    com.ibm.xsp.javascript.JavaScriptInterpreter.interpret(JavaScriptInterpreter.java:193)
    com.ibm.xsp.binding.javascript.JavaScriptValueBinding.getValue(JavaScriptValueBinding.java:78)
    javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:451)
    com.ibm.xsp.component.UIDataPanelBase.isRenderedProp(UIDataPanelBase.java:81)
    com.ibm.xsp.component.UIDataPanelBase.fillShadowedFlags(UIDataPanelBase.java:231)
    com.ibm.xsp.component.UIDataPanelBase.encodeBegin(UIDataPanelBase.java:240)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:840)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:851)
    com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1317)
    com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)
    com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:641)
    com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:320)
    com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:335)
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
    com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
    com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:264)
    com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:248)
    com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:200)
    com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
    com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:137)
    com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
    com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
    com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1267)
    com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:847)
    com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
    com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
    com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1251)
    com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:598)
    com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:421)
    com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:341)
    com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:297)
    com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)

person pipalia    schedule 22.09.2012    source источник
comment
В каком контексте вы пытаетесь это сделать?   -  person Per Henrik Lausten    schedule 22.09.2012
comment
Я думаю, что нашел альтернативу, используя session.getEffectiveUserName() - я пытаюсь использовать его, чтобы получить текущее имя пользователя, а также проверить, анонимно оно или нет. Мне все еще было бы интересно узнать, почему это не работает на XPage, используемом в нескольких местах, включая отображаемое свойство панели.   -  person pipalia    schedule 22.09.2012
comment
Это зависит от сервера! Так что не уверен, что это какая-то проблема с конфигурацией!   -  person pipalia    schedule 23.09.2012
comment
Можете ли вы вернуться и посмотреть, что вы получите в качестве context.getUser()? В моей собственной системе, когда пользователь вообще не подключен к Интернету и работает локально, getUser возвращает (fullName: null, name: CN=David Navarre/O=DAI, mail: null, groups: null, roles: [] ). Если я подключен, я получаю все значения, как и ожидалось. Очевидно, это как-то связано с доступом к каталогу для правильной установки объекта getUser.   -  person David Navarre    schedule 17.03.2015
comment
Спасибо, Дэвид, я проверю и вернусь к вам.   -  person pipalia    schedule 20.03.2015


Ответы (4)


У нас тоже была эта проблема, для пользователей, аутентифицированных из вторичной адресной книги домино (знание через помощь каталога). Мы решили больше не использовать «context.getUser()»:

  • заменить context.getUser().getRoles() на database.queryAccessRoles(session.getEffectiveUserName())
  • заменить context.getUser().getFullName() на userBean.commonName
  • заменить context.getUser().getCommonName() на userBean.commonName
  • (и даже если это работает), замените context.getUser().getDistinguishedName() на session.getEffectiveUserName()
  • заменить context.getUser().getGroups() на _getUserGroupNameList() (не на session.getUserGroupNameList(), список NotesName вместо строк)

    function _getUserGroupNameList() {
        var lNotesName:java.util.Vector = session.getUserGroupNameList(); // list of NotesName
        var lString:java.util.Vector = new java.util.Vector();
        for (var i = 0; i < lNotesName.size(); i++) lString.add(lNotesName.get(i).getCanonical());
        return lString;
    }
    
person Philippe    schedule 19.06.2019

Я создаю быстрый образец и не могу воспроизвести ошибку

<xp:text escape="true" id="computedField1"
    value="#{javascript:context.getUser().getCommonName()}" />

Что именно вы делаете?

Кстати, вы также можете использовать EL

    <xp:text escape="true" id="computedField1"
    value="#{context.user.commonName}" />
person Ulrich Krause    schedule 23.09.2012
comment
Спасибо, Ульрих - эта проблема по какой-то причине специфична для сервера, потому что это не происходит на моем сервере, а происходит на сервере клиента - это поставило меня в тупик! Вот что я делаю на панели: rendered=#{javascript: context.getUser().getCommonName().toLowerCase() != 'anonymous'} - person pipalia; 23.09.2012
comment
Спасибо за предложение EL, я согласен, что лучше использовать EL, где это возможно - лучшая производительность - хотя все еще не уверен, почему что-то подобное происходит на одном сервере, а не на других! Может быть, это какая-то странная проблема с конфигурацией? - person pipalia; 23.09.2012

Я до сих пор не уверен, почему это вызывает ошибку на одном конкретном сервере, а не на других. Тем временем я решил использовать session.getEffectiveUserName(), чтобы обойти эту проблему.

person pipalia    schedule 28.09.2012

В настоящее время у меня есть эта проблема. Это связано с идентификатором пользователя и NAB на этом сервере. Я не знаю, что именно, но у меня была проблема с дайджестом пароля id. Это означает, что мой пароль личного документа (имена) на этом конкретном сервере не был синхронизирован с psw на моем идентификаторе. Итак, в клиенте заметок я получил сообщение «Извините, вы заблокированы». Теперь я обновил пароль и могу войти в систему, но после этого это начало происходить. Я не могу получить имя пользователя. Ни из контекста, ни из сессии. В основном работает забавно.

person dregos    schedule 18.09.2014