У меня есть простое приложение, в котором у меня есть Tabpanel с несколькими вкладками, добавленными к нему. Каждая вкладка будет извлекать данные из внешних URL-адресов и отображать данные.
Данные этих внешних URL-адресов постоянно меняются каждые 30 минут, но адрес URL остается таким же.
Поэтому, когда я нажимаю на отдельные вкладки, не обновляя всю страницу, обновленные данные не отображаются на вкладках после изменения исходного содержимого в URL-адресе. Я использую iframe для отображения содержимого внешних URL-адресов на каждой вкладке.
Мой вопрос здесь, как сделать каждую вкладку autorefresh (или) перезагрузить вкладку, щелкнув заголовок вкладки?
Я просмотрел несколько уже опрошенных вопросов о стеке, но не помог полностью.
В настоящее время я использую http meta tags для обновления всего браузера каждые 30 секунд. Но проблема заключается в том, что браузер устанавливает первую вкладку, и пользователю снова нужно щелкнуть по вкладке по своему выбору, и это раздражает.
Вы можете добавить обработчик выделения на панель вкладок. и проверьте выбранный элемент табуляции из события. затем снова установите URL-адрес соответствующего кадра.
пример
// Create an empty tab panel
TabPanel tabPanel = new TabPanel();
// create contents for tabs of tabpanel
final Frame cotent1 = new Frame( "http://www.youtube.com/embed/j6cxZp4ii6c?autoplay=true" );
final Frame cotent2 = new Frame( "http://www.youtube.com/embed/j6cxZp4ii6c?autoplay=true" );
// create titles for tabs
String tab1Title = "TAB 1";
String tab2Title = "TAB 2";
// create tabs
tabPanel.add( cotent1, tab1Title );
tabPanel.add( cotent2, tab2Title );
// select first tab
tabPanel.selectTab( 0 );
// set width if tabpanel
tabPanel.setWidth( "400" );
tabPanel.addSelectionHandler( new SelectionHandler<Integer>()
{
@Override
public void onSelection( SelectionEvent<Integer> event )
{
if(event.getSelectedItem() == 0)
{
cotent1.setUrl( "http://www.youtube.com/embed/j6cxZp4ii6c?autoplay=true" );
}
// likewise set the urls to all the content
}
} );
Не используйте URL. Просто слушайте изменения на вкладках и делайте необходимые
yourTabPanel.addSelectionHandler(new SelectionHandler<Integer>() {
@Override
public void onSelection(SelectionEvent<Integer> event) {
if (event.getSelectedItem() == 1) {
// do something here // get data for tab1
}
}
});
Мое предположение об этом будет,
У вас должен быть обработчик кликов для всех вкладок и при щелчке по вкладке в основном обновлять DataProvider
вы используете для заполнения данных. Это зависит от того, как вы используете для отображения данных. Необходимо обновить контейнер данных, который необходимо отобразить. Если вы можете опубликовать свой код, кто-то может помочь лучше с более подходящим решением.
Более того, вы можете вызвать selectTab(int index,boolean fireEvents)
после интервала вместо обновления браузера.