当前位置:编程学习 > JAVA >>

struts2和jquery实现ajax的一个疑问

小弟初学struts2,新建一个叫ZS的工程,在用jquery进行ajax操作时碰见一个问题,struts配置时候,如果package的namespace为空时,url不需要加上工程名就能访问action,但是namespace不为空时url必须加上工程名(ZS)才能访问到action,这是为什么,怎么才能在namespace不为空时不加工程名也能访问到action(即url="test/selectDemo.action";)。
代码贴下面了:

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
<A href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"></A>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>



struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="struts-default.xml"></include>
<package name="demohello" namespace="/test"
extends="struts-default">
<action name="selectDemo" class="com.demo.DemoAction"
method="selectDemo">
</action>
</package>
</struts>


demo.js
function test(){ 
var url="/ZS/test/selectDemo.action";
   $.ajax({ 
    url:url,          
    type: 'POST',     
    dataType: 'xml',  
data: {name:"admin"},           
timeout: 1000,          
error: function(){
alert('Error loading XML document'); 
}, 
  success: function(xml){
alert(xml.xml);
 }
}); } 



Action.java

package com.demo;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DemoAction extends ActionSupport {
public String selectDemo() throws IOException {
//HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/xml;charset=utf-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
System.out.println("000000001");
StringBuilder sb = new StringBuilder();
sb.append("<?xml version='1.0' encoding='UTF-8'?><provinces>");
for (int i = 0; i < 10; i++) {
sb.append("<province>");
sb.append("<provinceid>name_" + i + "</provinceid>");
sb.append("<provinceName>" + i + "</provinceName>");
sb.append("</province>");
}
sb.append("</provinces>");
out.print(sb.toString());
out.flush();
out.close();
return null;
}
}
--------------------编程问答-------------------- 有木有人解答一下 --------------------编程问答-------------------- 你的意思是 必需加上 命名空间才行吗 --------------------编程问答-------------------- var url="test/selectDemo.action";试试。
或者把项目部署到webapp/Root目录下边 --------------------编程问答-------------------- 把namespace定义一下 --------------------编程问答-------------------- 怎么会有这样子的需求????
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,