我有带有提交按钮的表单,当单击按钮前进到下一页并从后端获取所有数据时。但是根据新的要求,页面需要保持不变,但后端流程应该相同。所以我用 Ajax 调用按钮来获取后端数据。但它没有按预期工作。请检查以下代码。
<s:form action="product!list" id="searchForm" method="Post" onSubmit="FormSubmitHandler()">
<s:submit action="product" method="list" value="search" />
</s:form>
我试图运行该页面。
<s:form action="product!list" id="searchForm" method="Post" onSubmit="FormSubmitHandler()">
<s:submit id="search" />
</s:form>
jQuery代码:
$("#search").click(function(){
jQuery.ajax({
url : '<s:url action="product" method="list" />',
success : function(data){alert(data)}
});
return 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)
动作类:
@Results({@Result(name=pricing.action.PartAction.INPUT,type=ServletDispatcherResult.class,value="/product-search.jsp", params={"location", "/product-search.jsp"}),
@Result(name="success",type=JSONResult.class,value="",params={"root","findList"})
})
@Validation()
public class PartAction extends BaseAction implements Preparable, ServletResponseAware {
public String list(){
try {
buildHeaders();
} catch (Exception e) {
log.error(e);
super.addActionMessage("No prices were found that match your search criteria. Please select different options and try again.");
return SEARCH;
}
return LIST;
}
BaseAction
其中实施:
@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;
}
上面的代码没有调用list()
动作类中的方法。