правильный способ проверки дополнительных значений полей - PullRequest
0 голосов
/ 30 сентября 2011

При написании метода в моем приложении, использующем playframework, мне нужно получить пользовательский ввод для полей Address и выполнить поиск в db для соответствующего. Если я не могу найти соответствующий адрес, мне нужно создатьновый адрес.

Здесь только addressLine1 и country являются обязательными полями.Пользователь может игнорировать addressLine2.

, принимая данные из html-формы, текстовые поля для необязательных полей возвращают пустую строку. Поэтому, чтобы протестировать создание Address, я решил создать Map<String,String>, чтобыпередан методу POST. Я попытался

addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("country","US");

Это вызвало исключение нулевого указателя, когда запрос jpql пытался привязать значения к карте для полей отсутствующих опций.

String query="select distinct a from Address a where a.addressLine1=:addressline1 and a.addressLine2=:addressline2 and a.country=:country";
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();
            ..

Я решил это, поставив пустые строки для всех необязательных полей

addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("addressline2","");
addrparams.put("country","US");

Я надеюсь, что это правильный способ сделать это .. Если кто-то может указать на лучший подход при тестировании таких ситуаций, это мне очень поможет

Адрес класса

@Entity
public class Address extends Model {    
    @Required
    String addressLine1;    
    String addressLine2;        
    @Required
    String country;
...
} 

обновление: Трассировка стека здесь

Account.java:207 где nullptrисключение, это строка

Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();

1 Ответ

1 голос
/ 30 сентября 2011

Ваш запрос неверный. Вы пропустили псевдоним и знак равенства в предложении where:

where a.addressline1 = :addressline1 ...

То, как вы строите карту, также неверно. Вы помещаете "clayton st" в качестве addressline1, а затем заменяете его пустой строкой.

Если эти исправления не работают, отредактируйте свой вопрос, вставьте трассировку стека исключения и сообщите нам, какая строка в вашем коде выдает его.

...