Калитка странность PropertyModel?

(удаление комментариев и добавление их в качестве ответа)

Поскольку у вас установлена ​​анаконда, попробуйте следующее:

conda install pyserial
or
conda install -c conda-forge pyserial

Основная причина этой проблемы заключается в том, что ваш пункт установка этого модуля в отдельном месте или на другую версию питона на вашем компьютере. И вы используете Python, возможно, на Jupyter или в какой-то другой IDE, которая работает через Anaconda. Таким образом, используя вышеизложенную установку conda, все зависимости будут установлены в нужной папке континуума, откуда модули IDE conda получают модули. Нет, вам не нужно ничего удалять, просто введите команду выше в cmd, и она должна работать.

5
задан Allain Lalonde 14 February 2009 в 02:21
поделиться

2 ответа

PropertyModel сделает то, что Вы уже хотите. Когда a PropertyModel запрашивается для его значения, это смотрит в двух местах:

  • Если метод "метода считывания" существует для данного свойства, PropertyModel называет метод считывания для получения значения свойства. А именно, PropertyModel ищет названный метод get<Property>, где <Property> выражение свойства, переданное PropertyModel конструктор и вызовы метод с помощью отражения, если это существует.

  • Если никакой метод "метода считывания" не существует, PropertyModel возвращает значение поля свойства непосредственно. А именно, PropertyModel использует отражательную находку поле, которое соответствует выражению свойства, переданному PropertyModel конструктор. Если поле соответствия найдено, PropertyModel возвращает значение поля. Обратите внимание что PropertyModel проверит частные и защищенные поля в дополнение к общедоступным полям для соответствия.

В Вашем случае, выражение свойства, используемое в PropertyModel конструктор "password", так PropertyModel будет сначала искать метод на user объект называют getPassword. Если никакой такой метод не существует, PropertyModel возвратит значение частного password поле вместо этого.

С тех пор в Вашем случае PropertyModel возвращает значение частного поля вместо того, чтобы назвать "метод считывания", Вы, скорее всего, ввели название с опечаткой метода считывания в Вашем User класс. Например, f Вы случайно ввел getPasssword (с 3 с), PropertyModel не найдет его, и будет нейтрализация к возврату частного поля.


Править

Если Вам не нравится PropertyModelповедение по умолчанию, можно создать подкласс PropertyModel это будет препятствовать тому, чтобы Калитка пробовала к чтению-записи к частным полям. Таким образом, можно вынудить все доступы свойства произойти через методы считывания и методы set.

Я записал пример BeanPropertyModel класс для демонстрации этого:

import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.model.PropertyModel;

/**
 * A custom implementation of {@link org.apache.wicket.model.PropertyModel}
 * that can only be bound to properties that have a public getter or setter method.
 * 
 * @author mspross
 *
 */
public class BeanPropertyModel extends PropertyModel {

    public BeanPropertyModel(Object modelObject, String expression) {
        super(modelObject, expression);
    }

    @Override
    public Object getObject() {
        if(getPropertyGetter() == null)
            fail("Missing getter");
        return super.getObject();               
    }

    @Override
    public void setObject(Object modelObject) {
        if(getPropertySetter() == null)
            fail("Missing setter");
        super.setObject(modelObject);
    }

    private void fail(String message) {

        throw new WicketRuntimeException(
                String.format("%s. Property expression: '%s', class: '%s'.",
                        message,
                        getPropertyExpression(),
                        getTarget().getClass().getCanonicalName()));
    }
}
11
ответ дан 18 December 2019 в 13:19
поделиться

большой ответ микрофоном spross! одно маленькое дополнение, хотя:

я не использовал бы модель свойства в этом случае. просто запишите

 new Model<String>(){ getObject(){...} setObject(){...}}

и реализуйте корректное поведение, которое делает точно, что Вы хотите.

3
ответ дан 18 December 2019 в 13:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: