2013-04-09 6 views
0

Спасибо, что вы внимание, у меня есть эта странная проблема, которую я не могу решить. Я построил DataTable с калиткой, сопоставленной с контентом из mongoDB. Также я работаю с Tomcat7 и Eclipsewicket DataTable getSort состояние не изменяется

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

public SortableGalaxyDataProvider() { 

    setSort("name", SortOrder.ASCENDING); 
} 

@Override 
public Iterator<? extends Galaxy> iterator(long first, long count) { 

    SortParam<String> sort = getSort(); //is always the same 

инициализация моей страницы осуществляется таким образом

[Редактировать] Я использую Spring для инъекций, так и в GalaxyTable странице у меня есть.

@Inject 
SortableGalaxyDataProvider galaxyProvider; 

public GalaxyTable() { 

    List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>(); 

    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors")); 
    columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius")); 


    add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10)); 
} 

Вот HTML строка используется для таблицы

<wicket:extend> 
<table cellspacing="0" wicket:id="galaxies">[table]</table> 
</wicket:extend> 

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

Любой ключ?

Благодаря

+0

Ваш код выглядит хорошо, не могли бы вы предложить быстрый запуск проблемы? –

+0

Я не знаю, как это сделать :). Код относительно прост и не намного больше того, что я показал. Я добавил дополнительную информацию в первом сообщении – StackHola

ответ

0

Один из способов фиксирующей проблемы впрыска Весна:

Впрыскивание DAO в страницу и использовать его в конструкторе работ поставщика данных.

@Inject 
    //SortableGalaxyDataProvider galaxyProvider; 
    UniversDAO dao; 

    public GalaxyTable() { 

     List<IColumn<Galaxy, String>> columns = new ArrayList<IColumn<Galaxy, String>>(); 

     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Name"),"name","name")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Type"),"type","type")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Ancestors"),"ancestors","ancestors")); 
     columns.add(new PropertyColumn<Galaxy,String>(new Model<String>("Radius"),"radius","radius")); 


     //add(new DefaultDataTable<Galaxy, String>("galaxies", columns, galaxyProvider, 10)); 
     add(new DefaultDataTable<Galaxy, String>("galaxies", columns, new SortableGalaxyDataProvider(dao), 10)); 
    } 

Однако я бы предпочел, чтобы он работал с обычной пружинной инъекцией. Проблема, как сказал Седрик, может быть такой пружиной для обертки.

1

Я думаю, ваша проблема может быть вызвана использованием SpringBean. Как он работает, я думаю, что в точке инъекции установлен автогенерированный прокси, поэтому, когда Wicket пытается установить состояние сортировки с помощью интроспекции, он делает это в прокси (или не выполняет этого). Еще одна вещь, которая может произойти, заключается в том, что Spring воссоздает компонент GalaxyProvider между двумя запросами ajax, состояние сортировки также будет потеряно.

Я попытался бы избавиться от инъекций в вашем коде и посмотреть, что он делает.

+0

Я думаю, что это может быть ответ. Я ищу точку разрыва, когда Wicket на самом деле пытается установить состояние сортировки, чтобы подтвердить или уверить это. – StackHola

+0

Проект теперь использует Play Fwk, этот вопрос не пойдет дальше. – StackHola