Использование GWT У меня есть класс Java:
public class Pojo {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
Вышеупомянутый класс совместно используется клиентским и серверным кодом.
Из клиентского кода я хотел бы получить динамический доступ к свойству . То есть я хотел бы написать метод со следующей сигнатурой:
public String getProperty(Object o, String propertyName)
Чтобы следующий код работал:
Pojo pojo = new Pojo();
pojo.setName("Joe");
getProperty(pojo, "name"); // this should return "Joe"
Очевидно, что отражение Java отсутствует. И я попробовал следующий метод JSNI:
public static native String getProperty(Object o, String name) /*-{
return o[name];
}-*/;
Но это не работает.
Специальный синтаксис для доступа к объектам Java из JavaScript также не может использоваться, поскольку я хочу, чтобы он был динамическим.
Есть идеи, как я могу это сделать?
Для полноты, я также хочу иметь возможность динамически устанавливать свойство.
РЕДАКТИРОВАТЬ: ответ blwy10 был отличным советом, который заставил меня искать с помощью " gwt reflection "вместо таких терминов, как"
Глядя на сообщение Карла Сегина, в котором он показывает, что проектирование с учетом тестируемости приводит к лучшему дизайну, в данном случае композиция превышает наследование .
В этом примере его CachedEmployeeLookup
имеет зависимость от EmployeeLookup
, которые реализуют один и тот же интерфейс, IEmployeeLookup
Как бы вы настроили это в StructureMap, чтобы что программа по умолчанию использует класс CachedEmployeeLookup
, в то время как CachedEmployeeLookup
получает введенный в него EmployeeLookup
?
-121 --- 8342907] [11642907] Linq для возврата ВСЕХ пар элементов из двух списков? Данные списки l1 = {1, 2} и l2 = {4, 5, 6} Я хочу получить новый список с элементами: rez = {{1, 4}, {1, 5}, {1, 6}, {2, 4}, {2, 5}, {2, #define TOSTRING (x) STRINGIFY (x) #define AT __FILE__ ":" TOSTRING (__ LINE__) RowFilter? Я ломаю голову над чем-то довольно глупым, но очевидно сложным. Просмотр данных dvFormula = dsFormula.Tables [0] .DefaultView; dvFormula.RowFilter = "'" + startDate.ToString ("yyyyMMdd") + "' & ...
Я ломаю голову над чем-то довольно глупым, но, по-видимому, сложным.
DataView dvFormula = dsFormula.Tables[0].DefaultView;
dvFormula.RowFilter = "'" + startDate.ToString("yyyyMMdd") + "' < EndDate OR EndDate = '19000101'";
dvFormula.Sort = "FromDate ASC";
Результат следующий:
Невозможно выполнить операцию «
Подскажите, пожалуйста, лучший способ решить эту проблему.
С уважением!
Даты нужно заключать в #, а не в апострофы.
dvFormula.RowFilter = "#" + startDate.ToString("MM/dd/yyyy") + "# < EndDate OR EndDate = #1/1/1900#";
В зависимости от поставщика данных вам может потребоваться экранировать даты с помощью символа #
, а не символа '
. Кроме того, я бы отформатировал ваши даты в формате ГГГГ-ММ-ДД
, чтобы их можно было правильно распознать как дату.