У меня есть приложение Xpage, которое использует библиотеку расширений, где xsp.extlib.convstate является «null» для одного из трех пользователей, пока не обновит страницу вручную. Все три пользователя получают доступ к приложению через RDP, используя Citrix и интернет-параметры, одинаковые для всех трех. Попытка выяснить, почему это происходит. Приложение находится только на одном сервере 9.0.1.xsp.extlib.convstate возвращает null
ответ
Судя по исходному коду, если не было conversationState инициализируются все же, conversationState бы не инициализирован, пока либо:
после фазы рендера Response (в фазе слушателя: com.ibm.xsp.extlib.component.layout.impl.ApplicationPhaseListener)
@SuppressWarnings("unchecked") // $NON-NLS-1$ public void afterPhase(PhaseEvent event) { if(event.getPhaseId()==PhaseId.RENDER_RESPONSE) { // After the render phase, we save the conversion state ConversationState.saveInSession(event.getFacesContext()); } }
в методе SetParent в UIApplicationLayout, и это, кажется, охраняют состояние «isRestoringState», что означает, что я не» я думаю, что это d запускается на первом представлении страницы, так как не будет никакого состояния для восстановления.
@Override public void setParent(UIComponent parent) { super.setParent(parent); if(null == parent){ // removing parent return; } // TODO should move this initialization to initBeforeContents instead FacesContextEx context = (FacesContextEx) getFacesContext(); if(null != context && !context.isRestoringState()) { ConversationState cs = ConversationState.get(context, FacesUtil.getViewRoot(this), true); // Initialize the conversation state // Set the current navigation path to the UserBean ApplicationConfiguration conf = findConfiguration(); if(conf!=null) { String navPath = conf.getNavigationPath(); if(StringUtil.isEmpty(navPath)) { // If there isn't a navigation path that is defined, the use the default one if(StringUtil.isEmpty(cs.getNavigationPath())) { navPath = conf.getDefaultNavigationPath(); } } if(StringUtil.isNotEmpty(navPath)) { cs.setNavigationPath(navPath); } } } }
Так что это может объяснить, почему он не будет инициализирован до 2 просмотра страницы. Вы можете попробовать принудительно инициализировать ConversationState, прежде чем пытаться его использовать, возможно, в beforePageLoad, вызвав один из методов get.() метода com.ibm.xsp.extlib.component.layout.ConversationState. Обратите внимание, что параметр boolean указывает, что метод создает ConversationState, если он не существует. Я не очень сильно разбираюсь в Javascript ServerSide, но думаю, это работает? Смыслы верны.
#{javascript: com.ibm.xsp.extlib.component.layout.ConversationState.get(facesContext, true); }
Если вы делаете это в Java, то:
ConversationState.get(FacesContext.getInstance(), true);
ли это звучит как объяснение того, почему вы видите свое поведение?
Приложение использует OneUILayout, поэтому, хотя ваше объяснение дает что-то повод, не имеет смысла, учитывая, что это поведение происходит только для одного из трех пользователей. –
Для 1 пользователя это происходит на каждой новой странице? или только для самой первой страницы, которую они загружают? все ли они получают доступ к приложению с помощью того же исходного URL-адреса? –
Все они имеют доступ через один и тот же URL-адрес. Поскольку мы теперь удалили панель инструментов отладки, мы больше не можем видеть значение talkstate. Спасибо за Ваш ответ –
- 1. PropertyInfo.GetValue (null, null) возвращает null
- 2. null == null возвращает false?
- 3. Почему (false || null) возвращает null, а (null || false) возвращает false?
- 4. Moq Возвращает метод возвращает null
- 5. Почему isset() возвращает null?
- 6. Count (*) возвращает null
- 7. MySQL LOAD_FILE возвращает NULL
- 8. Почему real_connect возвращает null?
- 9. getSupportFragmentManager(). FindFragmentByTag() возвращает null
- 10. GetAssetPreview всегда возвращает null
- 11. geocoder.getFromLocationName возвращает только null
- 12. Почему XGetWindowProperty возвращает null?
- 13. ComponentWillmount Fetch возвращает Null?
- 14. subpad возвращает NULL
- 15. getLastNonConfigurationInstance всегда возвращает null
- 16. asp.net querystring возвращает null
- 17. Почему BitmapFactory.decodeFile возвращает null?
- 18. System.getenv ("TEST_HOME") возвращает null
- 19. Метод getValueAt() возвращает null
- 20. `DataGridViewComboBoxCell` возвращает` null`
- 21. getStringArrayExtra() всегда возвращает null
- 22. Отражение getAnnotations() возвращает NULL
- 23. EditText возвращает null
- 24. Почему getActionView() возвращает null
- 25. System.console() возвращает null
- 26. Почему mysqli_real_escape_string() возвращает NULL?
- 27. Метод override возвращает null
- 28. Large Json возвращает null
- 29. Сценарий экземпляра возвращает null
- 30. «addGlobalMonitorForEventsMatchingMask» возвращает «null»
При первом доступе к приложению? когда он равен нулю? т.е. как вы к нему обращаетесь? –