Action类中配置注解跳转:
@Action("sample")
@Results({@Result(name = "ssss", location = "/Pages/sample/sampleList.jsp")})
public class SampleAction extends ActionSupport {
......
public String allSamples() {
log.info("所有样本分页显示");
if (page == null) {
page = new Page(10, 1);
}
samplePageList = sampleService.getSampleLimit(page);
return "ssss";
}
......
}
jsp页面调用:
$.get("sample!allSamples",{},function(responseText){
$("#sampleList").load(responseText);
});
问题: 如果在地址栏直接跳转 http://localhost:8080/proName/sample!allSamples 可以成功跳转到页面 sampleList.jsp
但是在jsp页面通过jquery调用,却总是报错:
Could not find action or result /Lims/%3Ctable?_=1373592165761 There is no Action mapped for namespace [/] and action name [<table] associated with context path [/Lims]. - [unknown location] at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185) at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63) at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 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 com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:619)
花了半天时间查找struts注解可能会犯的错误,但是还是没有找到。原来就把错误定位在了location路径写错了,但是发现写错路径的话页面会报404错误,因此可以证明页面路径是没有问题的。
第二天通过问朋友才发现错误:$("#sampleList").load(responseText); 就是这句话的错误!
原因:在每一个匹配元素的load事件中绑定一个处理函数。如果绑定给window对象,则会在所有内容加载后触发,包括窗口,框架,对象和图像。如果绑定在元素上,则当元素的内容加载完毕后触发。上面这句$("#sampleList").load(responseText);被写在了$.ready()里面,也就是说本页面还没有被加载完,所以找不到id为sampleList的元素,因此也就不会触发返回页面的任何样式。
解决:将$("#sampleList").load(responseText); 修改为$("#sampleList").html(responseText);问题解决。。。。。。