2015-07-21 3 views
1

Я думаю, что это ошибка в Tab контейнер ...Это ошибка в контейнере табуляции?

Открытие новой вкладки с помощью Java или на стороне сервера метод JavaScript CREATETAB, когда новая вкладка содержит панель, которая устанавливается, чтобы быть IFrame, указывающий на другой XPage в той же базе данных всегда будет возникать перезагрузка XPage после загрузки примерно пяти или шести вкладок (в Chrome IE делает то же самое, но требует больше вкладок ...)

Если вкладка содержит iframe, который указывает на другую база данных, в которой XPage работает, отлично работает.

Код SSJS: getComponent("djTabContainer1").createTab({title:"New tab"});;

Java-код

public static boolean createTab(UIDojoTabContainer tabContainer) { 

    try { 
     if (tabContainer == null) { 
      tabContainer = (UIDojoTabContainer) Utils.findComponent("TabContainer"); 
      if (tabContainer == null) { 
       return false; 
      } 
     } 

     String tabTitle = null; 
     String url = null; 
     String unid = null; 
     UIDojoTabPane newTab = null; 

     // get default number from current project preferences 
     tabTitle = "My Tabpage"; 
     url = Utils.GetXpageURL("tabpage.xsp"); 

     // create a new Tab 
     newTab = new UIDojoTabPane(); 
     newTab.setTitle(tabTitle); 
     newTab.setTabUniqueKey(new Random().toString()); 

     newTab.setClosable(true); 
     newTab.setId("TabContainer_" + unid); 
     newTab.setStyleClass("myTabContainer"); 

     Utils.WriteToConsole("setting style class on " + newTab.getTitle()); 
     // newTab.setStyle("height:auto;width:auto; overflow-y: auto;border: 0px;"); 

     // create new Panel 
     UIPanelEx newPanel = new UIPanelEx(); 
     newPanel.setId("IFrame" + unid); 
     newPanel.setStyleClass("iframeClass"); 
     // make an iFrame of this panel with our URL as src 
     newPanel.setTagName("iframe"); 
     Attr property = new Attr(); 
     property.setName("src"); 
     property.setValue(url); 
     newPanel.addAttr(property); 

     // add Panel to our new Tab 
     newTab.getChildren().add(newPanel); 

     // add the new tab to our tab container 
     tabContainer.getChildren().add(newTab); 
     tabContainer.setSelectedTab(unid); 
     return true; 
    } catch (Exception ex) { 
     Utils.WriteToConsole("Unable to add a new Tab Page to the Tab Container (com.tlcc.Main.createTab)", ex); 
     return false; 
    } 

} 

XPage, на который ссылается в Src свойстве фрейма является очень простым ...

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
<xp:button 
    value="Label" 
    id="button1"> 
</xp:button> 
<xp:inputText id="inputText1"></xp:inputText></xp:view> 

Когда XPage перезагружает он больше не имеет вкладок (кроме первой вкладки, которая была создана в XPage в начале) и не реагирует.

Говард

ответ

0

Таким образом, чтобы завершить этот ... установка для ViewState = nostate позволяет больше вкладок, но затем не держать компоненты в памяти. Таким образом, он хорошо работает для readonly XPages, но не тогда, когда документ в XPage находится в режиме редактирования. Установка Максимальных страниц на диске в свойствах Xsp на вкладке persistence позволит больше вкладок с iframes с XPages, но в какой-то момент все равно будет разбиваться.

Net есть, не использовать несколько плавающие фреймы, которые тянут в XPages из того же НФС ...

4

Это может быть ограничение дерева проблема страница сервера сохранение/компонент. Если вы используете постоянную страницу на сервере по умолчанию, на сервере хранится только 4 страницы в памяти (для каждого пользователя).

Когда вы создаете новые вкладки на странице, загружающей другой XPage, сервер заполняет очередь сохранения страницы сервера, а когда вы нажимаете пятую вкладку, текущая страница больше не является частью постоянной страницы на сервере (компонент дерево больше не находится в памяти), что приводит к перезагрузке текущей страницы.

Вы можете увеличить количество сохраненных страниц (а также перенести сохранение на диске вместо сохранения памяти). Вы также можете установить viewState для «ностализации» на XPage, который вы загружаете в iframe (по крайней мере, чтобы проверить мою теорию).

См Toby Samples blog post on state и этот ответ на аналогичный вопрос государственной: https://stackoverflow.com/a/31431917/785061

+0

Per почти наверняка на правильном пути здесь. Определение «текущий XPage» также, вероятно, будет фактором. Когда вы сначала загружаете родительский XPage, это будет текущая страница. Но если вы загрузите еще один XPage в iFrame, я бы ожидал, что XPage в iFrame будет считаться текущей страницей, и в этом случае метод сохранения родительской страницы изменится на диск, как если бы вы перешли из родительского страницы на страницу iFrame. –

+0

Это похоже на то, что я делаю в базе данных теста. Завтра попробуем «реальное» приложение. Благодаря Per !!!! – Howard