【问题标题】:Calling method via Ajax in Struts 1在 Struts 1 中通过 Ajax 调用方法
【发布时间】:2014-09-09 10:51:18
【问题描述】:

我有派生自 DispatchAction 的动作类。我想使用ajax从那里调用一个方法。当我单击下面显示的按钮时,我想使用 InvitationAction 的 add 方法。 错误是“请求[/InvitationAction] 不包含命名方法的处理程序参数。” 提前致谢。

public class InvitationAction extends DispatchAction{

public ActionForward add(ActionMapping mapping, ActionForm form, 
        HttpServletRequest request, HttpServletResponse response){
    InvitationForm invForm = (InvitationForm)form;
    Person newPerson = new Person();
    newPerson.setFirstName(invForm.getFirstName());
    newPerson.setLastName(invForm.getLastName());
    invForm.getPersonMap().put(invForm.getKey(), newPerson);
    invForm.reset(mapping, request);
    return mapping.findForward("success");
}

public ActionForward delete(ActionMapping mapping, ActionForm form, 
        HttpServletRequest request, HttpServletResponse response){
    InvitationForm invForm = (InvitationForm)form;
    invForm.getPersonMap().remove(invForm.getKey());
    return mapping.findForward("success");
}

public ActionForward edit(ActionMapping mapping, ActionForm form, 
        HttpServletRequest request, HttpServletResponse response){
    InvitationForm invForm = (InvitationForm)form;
    Person person = invForm.getPersonMap().get(invForm.getKey());
    invForm.setFirstName(person.getFirstName());
    invForm.setLastName(person.getLastName());
    return mapping.findForward("success");
}

}

.jsp端

function doAjaxPost() {  

  $.ajax({  
    type: "POST",  
    url: "/AjaxWithStruts1/InvitationAction.do?action=edit",
    success: function(response){  
      // we have the response  
      $('#info').html(response);  
    },  
    error: function(e){  
      alert('Error: ' + e);  

    }  
  });  
}  

<input type="button" value="add" onclick="doAjaxPost()"><br/>

struts-config.xml 端

<action-mappings>

    <action name="invitationForm" path="/invitation" type="com.raistudies.actions.InvitationAction" 
    scope="session" input="/index.jsp" parameter="action">
        <forward name="success" path="/index.jsp" redirect="true"/>
    </action>

</action-mappings>

【问题讨论】:

  • 我不确定问题是什么。 Struts 不关心请求是否是 Ajax。只需使用与浏览器 URL 栏中相同的 URL 向操作发出 Ajax 请求。
  • 我已经尝试过你所说的,但我遇到了名为 error[object XMLHttpRequest] 的错误。为什么会这样?
  • 如果您希望有人回答这个问题,您需要描述正在发生的事情、方式和时间。你甚至没有展示你是如何发出请求的——但到目前为止,它看起来像是一个 JS 问题,或者是一个服务器错误导致它返回到 JS 并且 JS 没有正确处理它。
  • 很抱歉。我对问题进行了一些编辑。
  • 那么错误是什么?记录它,扩展它。检查电线以查看响应中的内容。检查服务器/错误日志。你需要调试它;我们看不到发生了什么。

标签: ajax struts-1


【解决方案1】:

对于 Dispatch Action 在 ajax 调用中使用 URL,您需要指定映射路径 (/invitation.do) 而不是操作 (/InvitationAction.do)。 p>

function doAjaxPost() {  
  $.ajax({  
   type: "POST",  
   url: "/AjaxWithStruts1/invitation.do?action=edit",
   success: function(response){  
   // we have the response  
   $('#info').html(response);  
 },  
  error: function(e){  
   alert('Error: ' + e);  

 }  
 });  
} 

并且在映射中将验证设为 FALSE

<action name="invitationForm" path="/invitation" type="com.raistudies.actions.InvitationAction" 
   scope="session" input="/index.jsp" parameter="action" validation="false">
    <forward name="success" path="/index.jsp" redirect="true"/>
</action>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多