Java 在Struts 2中使用jQuery的Ajax表单提交按钮

Java 在Struts 2中使用jQuery的Ajax表单提交按钮,java,jquery,jsp,struts2,struts2-jquery,Java,Jquery,Jsp,Struts2,Struts2 Jquery,我有一个带有提交按钮的表单,当点击该按钮时,它将转发到下一页并从后端获取所有数据。但是基于新的需求,页面需要保持相同的页面,但是后端流应该是相同的。所以我用Ajax调用按钮来获取后端数据。但它并没有像预期的那样工作。请检查下面的代码 我正在尝试运行该页面 jQuery代码: 2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown

我有一个带有提交按钮的表单,当点击该按钮时,它将转发到下一页并从后端获取所有数据。但是基于新的需求,页面需要保持相同的页面,但是后端流应该是相同的。所以我用Ajax调用按钮来获取后端数据。但它并没有像预期的那样工作。请检查下面的代码


我正在尝试运行该页面


jQuery代码:

2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .jsp in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .vm in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .ftl in directory /
2013-07-01 09:18:02,334 WARN            org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
There is no Action mapped for action name pricing. - [unknown location]
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:70)
        at org.apache.struts2.rest.RestActionProxyFactory.createActionProxy(RestActionProxyFactory.java:51)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:500)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
@ParentPackage(value="pricing")
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
 protected static final String LIST = "list"; 
public String execute() throws Exception {
     
    return SUCCESS;
  }
$(“#搜索”)。单击(函数(){
jQuery.ajax({
url:“”,
成功:函数(数据){alert(数据)}
});
返回false;
});
控制台错误:

2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .jsp in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .vm in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .ftl in directory /
2013-07-01 09:18:02,334 WARN            org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
There is no Action mapped for action name pricing. - [unknown location]
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:70)
        at org.apache.struts2.rest.RestActionProxyFactory.createActionProxy(RestActionProxyFactory.java:51)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:500)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
@ParentPackage(value="pricing")
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
 protected static final String LIST = "list"; 
public String execute() throws Exception {
     
    return SUCCESS;
  }
动作类:

2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .jsp in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .vm in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .ftl in directory /
2013-07-01 09:18:02,334 WARN            org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
There is no Action mapped for action name pricing. - [unknown location]
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:70)
        at org.apache.struts2.rest.RestActionProxyFactory.createActionProxy(RestActionProxyFactory.java:51)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:500)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
@ParentPackage(value="pricing")
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
 protected static final String LIST = "list"; 
public String execute() throws Exception {
     
    return SUCCESS;
  }
@Results({@Result(name=pricing.action.PartAction.INPUT,type=ServletDispatcherResult.class,value=“/product search.jsp”,params={“location”,“/product search.jsp”}),
@结果(name=“success”,type=JSONResult.class,value=”“,params={“root”,“findList”})
})
@验证()
公共类PartAction扩展BaseAction实现可准备的ServletResponseAware{
公共字符串列表(){
试一试{
buildHeaders();
}捕获(例外e){
日志错误(e);
super.addActionMessage(“未找到与您的搜索条件匹配的价格。请选择其他选项并重试。”);
返回搜索;
}
退货清单;
}
BaseAction
实现了哪些:

2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .jsp in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .vm in directory /
2013-07-01 09:18:02,318 DEBUG apache.struts2.codebehind.CodebehindUnknownHandler - Trying to locate unknown action template with extension .ftl in directory /
2013-07-01 09:18:02,334 WARN            org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
There is no Action mapped for action name pricing. - [unknown location]
        at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
        at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:70)
        at org.apache.struts2.rest.RestActionProxyFactory.createActionProxy(RestActionProxyFactory.java:51)
        at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:500)
        at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
        at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
        at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513)
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
@ParentPackage(value="pricing")
public abstract class BaseAction extends ActionSupport implements ServletRequestAware, SessionAware {
 protected static final String LIST = "list"; 
public String execute() throws Exception {
     
    return SUCCESS;
  }
上面的代码没有调用action类中的
list()
方法。

试试这个脚本

<script type="text/JavaScript">
  $("#searchForm").submit(function(event) {
    event.preventDefault();
    var $form = $(this);
    var url = $form.attr('action');
    $.post(url).done(function(data) {
      alert(data);
    });
  });
</script>
试试这个脚本

<script type="text/JavaScript">
  $("#searchForm").submit(function(event) {
    event.preventDefault();
    var $form = $(this);
    var url = $form.attr('action');
    $.post(url).done(function(data) {
      alert(data);
    });
  });
</script>


有人知道这个问题吗?几句话:url看起来不对。除了在jQuery代码中添加一个错误处理程序外,它应该像“/product/save”。这样做你就会知道发生了什么。我真的不明白你在问什么:/请花5分钟来提高你问题的英语部分(代码似乎很好)。我不认为这是做这个请求的正确方法。你能检查一下struts ajax标记和/或struts2 jquery插件吗。有人知道这个问题吗?几句话:url看起来是错误的。相反,它应该像“/product/save”,并且在你的jquery代码中添加一个错误处理程序。这样做你就会知道发生了什么。我真的不明白了解你的问题:/请花5分钟来提高你问题的英语部分(代码似乎很好)。我认为这不是正确的方法。你能检查struts ajax标记和/或struts2 jquery插件吗。需要什么类型的按钮?比如或者因为你提到了form.attr('action'))。这不要紧,任何一个都不要紧。表单是它上面的另一个标记。它不会触发方法…注意:Struts带有codebehind插件。我正在尝试在页面加载时自动单击按钮。单击按钮时,它会给我错误“org.apache.struts2.dispatcher.dispatcher-找不到操作或结果”.由于此codebehind插件,所以操作必须是product!list。.希望这就是原因。按钮的类型需要是什么形式的?就像或因为您提到了form.attr('action'))。这不要紧,任何一个都不要紧。表单是它上面的另一个标记。它不会触发方法…注意:Struts带有codebehind插件。我正在尝试在页面加载时自动单击按钮。单击按钮时,它会给我错误“org.apache.struts2.dispatcher.dispatcher-找不到操作或结果”.由于此代码隐藏插件,所以操作必须是product!list..希望这就是原因。