Использование OGNL для возврата данных с карты <String, Object> - PullRequest
2 голосов
/ 18 февраля 2010

Использование Struts 2.1.6, xwork 2.1.2 и ognl 2.6.11 В моих действиях с Struts у меня есть карта, из которой я извлекаю элементы из OGNL. Если ключ, который я использую для извлечения, не существует на карте, тогда OGNL возвращает пустой массив объектов, который OGNL преобразует в строку, и я получаю ссылку на объект java.lang.Object@6 .... Это происходит в нескольких места и, кажется, карта, имеющая значение generic, указанное в качестве объекта. Это не то, что я могу изменить. Я проследил проблему некоторое время, но когда я оказался глубоко в кишечнике кода OGNL, я не увидел свет в конце туннеля. В настоящее время я собираюсь пойти с уродливым взломом проверки возврата строки, чтобы увидеть, начинается ли она с «java.lang.Object @», и если да, вернуть пустую строку. Мне не нравится решение, но это то, что позволяет время. Кто-нибудь сталкивался с подобной проблемой?

Кроме того, куда пошла OpenSymphony? Похоже, что обновления на их веб-сайте иссякли, пользовательские форумы говорят, что они преобразуются в группы Google не позднее ноября-12-09

.

1 Ответ

2 голосов
/ 19 августа 2010

Это проблема с нулевыми значениями: если значение равно нулю, поведение по умолчанию заключается в создании значения с использованием конструктора по умолчанию. Поскольку типом значения вашей карты является «Объект», создаются новые объекты с нулевым значением.

Чтобы остановить это поведение:

  • использование @CreateIfNull( value = false )
  • используйте mapName_CreateIfNull=false в файле classname-convertion.properties.
...