У меня есть приложение Struts 1, которое использует Ajax для создания и удаления некоторых объектов в приложении.И для операций создания, и для удаления, когда операция публикуется браузером, она обрабатывается сервером дважды.
Это , а не , когда ajax публикуется дваждыбраузер.Я использовал прокси-инструмент Paros, чтобы подтвердить, что ajax-запрос отправляется только один раз браузером, но мой класс действий по-прежнему вызывается дважды.
Используя Eclipse, я установил точку останова отладки и заметил, что вызовстек не всегда одинаков для моего класса действий.
Первый проход, который я получаю
MyActionClass.getDisplayPage(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 65
MyActionClass(Action).execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 224
ExecuteAction.execute(ActionContext, Action, ActionConfig, ActionForm) line: 53
ExecuteAction(AbstractExecuteAction).execute(ActionContext) line: 64
ExecuteAction(ActionCommandBase).execute(Context) line: 48
ChainBase.execute(Context) line: 190
LookupCommand.execute(Context) line: 304
ChainBase.execute(Context) line: 190
ComposableRequestProcessor.process(HttpServletRequest, HttpServletResponse) line: 280
ActionServlet.process(HttpServletRequest, HttpServletResponse) line: 1858
ActionServlet.doPost(HttpServletRequest, HttpServletResponse) line: 459
Второй проход, который я получаю (дополнительные строки отмечены ***
)
MyActionClass.getDisplayPage(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 65
***MyActionClass.unspecified(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 199
***MyActionClass(DispatchAction).dispatchMethod(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse, String) line: 242
***MyActionClass(DispatchAction).execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 167
***MyActionClass(Action).execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) line: 217
ExecuteAction.execute(ActionContext, Action, ActionConfig, ActionForm) line: 53
ExecuteAction(AbstractExecuteAction).execute(ActionContext) line: 64
ExecuteAction(ActionCommandBase).execute(Context) line: 48
ChainBase.execute(Context) line: 190
LookupCommand.execute(Context) line: 304
ChainBase.execute(Context) line: 190
ComposableRequestProcessor.process(HttpServletRequest, HttpServletResponse) line: 280
ActionServlet.process(HttpServletRequest, HttpServletResponse) line: 1858
ActionServlet.doPost(HttpServletRequest, HttpServletResponse) line: 459
За исключением отмеченных различий, стеки вызовов идентичны.
Вот действие по настройке распорок, относящееся к этому сообщению
<action path="/myAjaxRequest"
type="com..example.MyActionClass"
name="myActionForm"
parameter="save">
</action>
Есть ли у кого-нибудь какие-либо идеи относительноидет второй проход?Я не знаю, с чего начать.