2012-06-08 3 views
1

Я разрабатываю функцию поиска с калитки. Класс DropDownChoice используется для выбора поля поиска искомого объекта. Как это сделать, чтобы выпадающие имена были взяты непосредственно из искомого класса.Wicket: Получить имена элементов списка DropDownChoice из имен переменных класса

Предположим, у меня есть класс FooBar, содержащий переменные foo и bar. Если я хочу, чтобы выбрать, какой из них является поле выбора критериев, как я могу получить именование из файла ресурсов дают значение в моем файле ресурсов как

FooBar.foo="Search for foo" 
    FooBar.bar="Search for bar" 

Файл ресурсов должен быть таким, но как подключить этот в классе класса java?

+0

Моя цель такова: у меня есть селектор (поиск foo или bar), а затем поле поиска, которое ищет foos или бары в зависимости от этого выбора. Моя проблема заключается в том, как сопоставить все так, что для i18n требуется только FooBar.name, и поиск работает как магия, когда все правильно отображается. Существует ли такое отображение? Я новичок в Wicket, но я прочитал, например. о PropertyModel, и все кажется, что это будет возможно, но не знаю, как это сделать. – mico

+0

Ничего особенного калитки. Единственный способ, который я вижу, - использовать java-отражение api. См. Http://tutorials.jenkov.com/java-reflection/fields.html для идеи – bert

ответ

1

Прежде всего, вы можете получить поля и его значение, как этого

import java.lang.reflect.Field; 

public class FooBar extends AbstractFooBar{ 
public String foo = "Search for foo"; 
public String bar = "Search for bar"; 

public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { 
    Field[] fields = FooBar.class.getFields(); 
    // Field[] fields = AbstractFooBar.class.getFields(); 
    for (Field field : fields) { 
     System.out.println(field.get(new Object()).toString()); 
    } 
} 

} Но, как вы можете догадаться, вы не можете использовать любую абстракцию. Также все ваши поля должны быть общедоступными.

Вы можете инициализировать свой класс, используя файл ресурсов. Вы можете передавать поля, используя IChoiceRenderer, в DropDownChoice после получения поля с отражением.

Тип DropDownChoice может быть полем, и вы можете его инициализировать, указав список полей. Затем в вашем IChoiceRenderer вы можете получить объект модели.

Надеюсь, это поможет.