Struts 2 не устанавливает свойство действия при отправке формы. Обнаружено непредвиденное исключение. Ошибка установки выражения со значением ['1', ]

Struts 2 дает странное поведение, когда коммерческие объекты productCategory не устанавливаются при отправке формы. Это происходит в некоторых случаях, подобных этим. Другие поля устанавливаются правильно.

В большинстве случаев struts 2 очень хорошо настраивает пользовательские объекты и даже для сложных объектов, таких как List внутри объекта, но в этом случае это дает странное поведение.

Может ли кто-нибудь помочь в этом. Могу ли я отладить код struts 2, чтобы проверить, почему он не устанавливает свойство. Если возможно, дайте мне знать шаги

Спящий доменный объект:

public class Brand {            
    private Long id;                
    private String brandName;               
    private String brandDescription;                
    private Brand productSubCategory;               
    private ProductCategory productCategory;                
    private CommercialType commercial;

    /* getters and setters */
}

JSP:

<s:select label = "Commercial Type" 
           name = "brand.commercial.id" 
           list = "#attr.masterData.commercialTypes" 
        listKey = "id" 
      listValue = "commercialType" 
          value = "%{brand.commercial.id}" 
          theme = "simple" 
      headerKey = "" 
    headerValue = "--Select--" 
/>

person POJO    schedule 04.02.2014    source источник
comment
Вы получаете ошибки или просто неправильно устанавливаете значение? Указывают ли эти поля на экземпляры этих классов или они null?   -  person Anthony Grist    schedule 04.02.2014
comment
Это не просто делает собственность коммерческой. Без ошибок. коммерческое значение null.brand.commercial.id не задано.   -  person POJO    schedule 04.02.2014
comment
Вот исключение с devmode true. Неожиданное исключение, обнаруженное при настройке «brand.commercial.id». Ошибка установки выражения «brand.commercial.id» со значением ['1', ]   -  person POJO    schedule 04.02.2014
comment
Если commercial равно null, вам нужно либо сохранить объект в области сеанса, а не запрашивать, либо инициализировать поле commercial экземпляром класса CommercialType при его объявлении. Честно говоря, первое звучит как правильный маршрут, но это зависит от того, что вы с ним делаете. Вы не можете установить поле в поле, которое ни на что не ссылается.   -  person Anthony Grist    schedule 04.02.2014
comment
Спасибо, Энтони Грист. Последний работал нормально. Я создал экземпляр дочерних объектов внутри конструктора родительского конструктора. Но мне все еще интересно, почему это странное поведение. В большинстве случаев он работает нормально.   -  person POJO    schedule 05.02.2014
comment
Ради любопытства, можете ли вы опубликовать CommercialType полный код (также конструкторы, геттеры и сеттеры)?   -  person Andrea Ligios    schedule 05.02.2014


Ответы (1)


Ответ основан на первом просмотре

Я не нашел никакой ошибки в коде, который вы разместили. Но, судя по ошибке, сгенерированной в режиме разработки, мои мысли бродят вокруг этого.

Ошибка

Unexpected Exception caught setting 'brand.commercial.id' Error setting expression 'brand.commercial.id' with value ['1', ]

Возможная причина

brand.commercial.id используется как переменная имени в двух или более местах в одной и той же форме. если одна и та же переменная установлена ​​дважды в одном и том же имени, struts будет рассматривать это как список, который делает это `['1', ] , предполагая, что brand.commercial.id не является списком.

Другая возможность заключается в том, что для некоторого значения списка установлено целочисленное значение.

person Dileep    schedule 05.02.2014