Почему Spring не внедряет карту в дочерний класс Struts 2 Action, а вставляет родительские объекты? - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть следующая конфигурация в моем приложении applicationContext.xml Spring для добавления объектов в мой проект Java Struts 2:

<util:map id="typeToURLMap">
    <entry key="TYPEA" value="./ur1.x" />
    <entry key="TYPEB" value="./url2.x" />
    <entry key="TYPEC" value="./url3.x" />
    <entry key="OTHER" value="./url4.x" />
</util:map>

<bean id="parentAction" class="my.package.ParentAction" scope="prototype">
    <property name="businessDelegate" ref="businessDelegateNotRelevantToThisExample" />
</bean>

<bean id="childAction" class="my.package.ChildAction" scope="prototype" parent="parentAction">
    <property name="typeToURLMap" ref="typeToURLMap"/>
</bean>

По какой-то причине сеттер вызывается в родительском действии, но не в дочернем действии. Что-то не так с этой конфигурацией?

Примечание. Насколько я понимаю, util: map будет по умолчанию использовать Java-тип HashMap.

My ParentAction выглядит следующим образом:

 public class ParentAction extends MyAppBaseAction {

        private BusinessDelegate businessDelegate;

        //other action code using business delegate

        /**
         *  This IS called.
        */
        public void setBusinessDelegate(BusinessDelegate delegate){
            this.businessDelegate = delegate;
        }
    }

Мой ChildAction выглядит следующим образом:

public class ChildAction extends ParentAction{

    private Map<String,String> typeToURLMap;

    //other action code using map

    /**
     *  Never Called! (Why?)
    */
    public void setTypeToURLMap(Map<String,String map){
        this.typeToURLMap = map;
    }
}

Любая помощь будет принята с благодарностью. Спасибо!

1 Ответ

1 голос
/ 21 февраля 2011

Попробуйте написать модульный тест для файла applicationContext.xml

public class ApplicationContextTest extends TestCase {

  protected ApplicationContext      ctx;

  protected static final String[]   CONTEXT_LOCATIONS = new String[] {
      "classpath:resources/applicationContext.xml"};

  public void setUp() throws Exception {
    super.setUp();
    ctx = new ClassPathXmlApplicationContext(CONTEXT_LOCATIONS);
  }

  public void test() {
    ChildAction ca = ctx.getBean("childAction", ChildAction.class);
    assertNotNull(ca.getTypeToURLMap());
  }
}

Если тест пройден, посмотрите, как распорки интегрированы с пружиной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...