Я решил свою проблему. Это происходит в пользовательском ActionMapper:
Чтобы выяснить, существует ли действие, я сначала создаю строку с именем класса (включая пространство имен) нужного действия. Тогда я звоню
Class.forName("namespaceroot.foo.bar.myaction");
Если действие не существует, выдается исключение ClassNotFoundException
, которое я могу проверить в блоке try { ... } catch { ... }
. Внутри блока catch
я могу изменить пространство имен сопоставления на резервное пространство имен. Это имеет некоторые последствия для ActionProxy
: пространство имен также должно быть изменено в getMappingFromActionName
. В противном случае ActionProxy
содержит пространство имен запроса, что обычно нормально. DefaultActionProxy
не имеет установщика для пространства имен, поэтому я вложил его в подкласс и создал его, используя пользовательский AxtionProxyFactory
. Уф.
Это не элегантно, имхо, но пока у меня нет идеи получше, она останется такой. Я хотел бы услышать лучшее решение!