AdminBaseAction.java如下
package cn.sign_up.web.struts.actions;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;public abstract class AdminBaseAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// TODO Auto-generated method stub
return doExecute(mapping, form, request, response);
}

public abstract ActionForward doExecute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception ;
}
AjaxDeptDataAction如下
package cn.sign_up.web.struts.actions;import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Set;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import cn.sign_up.domain.Academy;
import cn.sign_up.domain.Department;
import cn.sign_up.web.daoimpl.AdminDaoImpl;public class AjaxDeptDataAction extends AdminBaseAction{
public ActionForward doExecute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AdminDaoImpl dao = AdminDaoImpl.getInstance();
String ano = request.getParameter("ano");
Academy academy = dao.findAcademyById(ano);
Set<Department> set = academy.getDepts();
String content = ""; for( Iterator<Department> iterator = set.iterator(); iterator.hasNext();) {
Department dept = iterator.next();
content += dept.getDno();
content += "$";
content += dept.getName();
content += "$"; }
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.println(content);
return null;
}
}
请问如何把这个struts1写的改成struts2 给思路就行  具体我自己写  struts2中没有action类可继承  最好能给出doExecute()跟Execute()两个方法的参数

解决方案 »

  1.   

    继承ActionSupport,定义成员变量content,ano,AdminDaoImpl ,页面使用struts标签,改改配置文件,其余的和struts1差不多了
      

  2.   

     AdminDaoImpl.getInstance();这里的getInstance()方法用什么替换
      

  3.   

    是的。ActionSupport,你没有务业层吗?就直接到Dao了呀。
      

  4.   

    package com.sign_up.action;import java.io.PrintWriter;
    import java.util.Iterator;
    import java.util.Set;import com.sign_up.bean.Academy;
    import com.sign_up.bean.Department;
    import com.sign_up.service.AcademyService;  public class AjaxDepartmentDataAction{
    private AcademyService academyservice;
    private Academy academy;
    private static final long serialVersionUID = 1L; public AcademyService getAcademyservice() {
    return academyservice;
    }
    public void setAcademyservice(AcademyService academyservice) {
    this.academyservice = academyservice;
    }
    public Academy getAcademy() {
    return academy;
    }
    public void setAcademy(Academy academy) {
    this.academy = academy;
    }
    public String execute(){
    academy = academyservice.findById(academy.getAcaId());
    Set<Department> departments = academy.getDepartments();
    String content = ""; for( Iterator<Department> iterator = departments.iterator(); iterator.hasNext();) {
    Department department = iterator.next();
    content += department.getDepId();
    content += "$";
    content += department.getDepName();
    content += "$";
    }

    response.setCharacterEncoding("GBK");
    PrintWriter out = response.getWriter();
    out.println(content);
    return null;
    }
    }
    我改成了这样    但是response下面有红线提示,请问怎么处理   还有就是这是个2级下拉框的联动处理,struts配置是不是不要配置result只要写action就可以?execute()方法的返回类型是不是写string
      

  5.   

    execute()方法的返回类型是string,和result中的name对应;
    struts2中response=ServletActionContext.getResponse();
      

  6.   

    Map response = (Map) ActionContext.getContext().get("response");
    这个response类型写什么好    PrintWriter out = response.getWriter();
    getWriter()下面老有红线说类型不对
      

  7.   

    LZ,Struts2不只是改下action吧。最重要的struts配置文件呢?Struts2已经脱离Web容器了,没有了httprequest和rsp了。
      

  8.   

    struts2不用拿response,直接定义成员变量,加上get(),set()方法,jsp就能拿到对应的值了
      

  9.   

    谢楼上两位    不过我还是没实现二级下拉框级联 贴两段代码
    public String execute() throws Exception {
    //id = academy.getAcaId();
    //System.out.println("id=" + id);

    academy = academyservice.findById(academy.getAcaId());
    departments = academy.getDepartments();
    String content = ""; for (Iterator<Department> iterator = departments.iterator(); iterator
    .hasNext();) {
    Department department = iterator.next();
    content += department.getDepId();
    content += "$";
    content += department.getDepName();
    content += "$";
    }
    //HttpServletResponse response = (HttpServletResponse) ActionContext
    //.getContext().get("response");

    //response.setCharacterEncoding("GBK");
    //PrintWriter out = response.getWriter();
    //out.println(content);
    return null; }
    struts.xml配置 <action name="getDepartmentData" class="ajaxDepartmentDataAction"></action>
    下面是add_world.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
    + request.getServerName() + ":" + request.getServerPort()
    + path + "/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <script type="text/javascript">
    var xmlrequest;
    function createXMLHttpRequest() {
    if (window.XMLHttpRequest) {
    xmlrequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    try {
    xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
    }
    }
    }
    }
    function change(id) {
    createXMLHttpRequest();

    var uri = "getDepartmentData.action?acaId="+id;

    xmlrequest.open("POST", uri, true);
    xmlrequest.setRequestHeader("Content-Type",
    "application/x-www-form-urlencoded");
    xmlrequest.onreadystatechange = processResponse;
    xmlrequest.send(null);
    }
    function processResponse() {
    if (xmlrequest.readyState == 4) {
    if (xmlrequest.status == 200) {

    var departments = xmlrequest.responseText.split("$")
    var displaySelect = document.getElementById("department");
    displaySelect.innerHTML = null;
    for ( var i = 0; i < departments.length - 2;) {
    var op = document.createElement("option");
    op.value = departments[i];
    op.innerHTML = departments[i + 1];
    displaySelect.appendChild(op);
    i += 2;
    }

    else {
    window.alert("您所请求的页面有异常:"+ xmlrequest.status);
    }
    }
    }function trim(s) {
    return s.replace(/^\s*/, "").replace(/\s*$/, "");
    }
    function check() {
    var errStr = "";
    if(trim(document.getElementById("name").value) == null || trim(document.getElementById("name").value) == ""){
    errStr += "\n年级名称不能为空";
    }

    if(errStr == "") {
    return true;
    }

    alert(errStr);
    return false;
    }
    </script>
    <base href="<%=basePath%>"> <title>增加年级</title> </head> <body>
    <br>
    <br>
    <br>
    <center>
    <h1>
    增加年级
    </h1>
    </center>
    <center>
    <form action="saveWorld" method="post" onsubmit="return check();">
    <table>
    <tr>
    <td>
    所在学院:
    </td>
    <td> <select name="world.department.academy.acaId"
    onchange="change(this.value);">
    <c:forEach items="${academy}" var="academy">
    <option value="${academy.acaId }">
    ${academy.acaName}
    </option>
    </c:forEach>
    </select> </td>
    </tr>
    <tr>
    <td>
    所在专业:
    </td>
    <td>
    <select name="world.department.depId" id="department">
    <c:forEach items="${departments}" var="department">
    <option value="${department.depId }">
    ${department.depName}
    </option>
    </c:forEach>
    </select>
    </td>
    </tr>
    <tr>
    <td>
    年级名称:
    </td>
    <td>
    <input type="text" id="name" name="world.worName" />
    </td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="提交">
    <input type="reset" value="重置">
    </td>
    </tr>
    </table>
    </form>
    </center>
    </body>
    </html>
    自己先慢慢弄,也请高手指教
      

  10.   

    选择学院后弹出“您所请求的页面有异常 500” 500是status
      

  11.   

    这个错误时window.alert()弹出来的~~!
      

  12.   

    我觉得主要问题就是<SCRIPT>怎么去接收action传回来的Set<Department>类型的department,不过我不会弄 呵呵
      

  13.   

    看看struts2教程把。这个比较简单的。
      

  14.   

    var uri = "getDepartmentData.action?acaId="+id;有没什么办法查看id是否传进去了 我在action中设置一个打印输出没有反应
      

  15.   

    getDepartmentData.action  老感觉这个action没执行  没一点反应   晕的死
      

  16.   

    应该确实没有执行,struts.xml配置应该<action name="getDepartmentData" class="cn.sign_up.web.struts.actions.ajaxDepartmentDataAction"></action>
      

  17.   

    action 是return null 不进行页面跳转  所以这么写了 大侠们救救我   
      

  18.   

    要么大家给我个struts2  ajax做的二级下拉框联动的例子   万分感激
      

  19.   

    public class AjaxDepartmentDataAction implements ServletResponseAware{
    ......
    private HttpServletResponse response;
    ......
    public void setServletResponse(HttpServletResponse reresponse) {
    this.response = reresponse;
    }
    ......
    public String execute(){
    response.setCharacterEncoding("GBK");
    PrintWriter out = response.getWriter();
    out.println("你要输出的内容");
    return null;
    }}
      

  20.   

    我要struts2 ajax做的二级下拉框联动的例子
      

  21.   

    改前台struts + ajax的工作量还是有点大啊,标签要改,配置文件也要改,搞不好ajax对象名称,方法也要改。
      

  22.   


    继承了baseActionSurport
    httpRequest  rs=ServletActionContext.getRequest();
    response同上
      

  23.   

    这是我现在改好的  现在别的地方都没问题了  就是返回第二个下拉框的值这里还没写好,现在action返回一个content    他的内容是"4$数学$1$计算机科学与技术$"这个形式  再研究下怎么接收就ok了,先发一下action怎么写的  到时弄完整了再把整个struts2跟ajax结合的二级联动下拉框发给大家
    package com.sign_up.action;import java.util.Iterator;
    import java.util.Set;import com.sign_up.bean.Academy;
    import com.sign_up.bean.Department;
    import com.sign_up.service.AcademyService;public class AjaxDepartmentDataAction {
    private Academy academy;
    private Integer acaId;
    private AcademyService academyservice;
    private Set<Department> departments;
    private String content; public Academy getAcademy() {
    return academy;
    } public void setAcademy(Academy academy) {
    this.academy = academy;
    } public AcademyService getAcademyservice() {
    return academyservice;
    } public void setAcademyservice(AcademyService academyservice) {
    this.academyservice = academyservice;
    } public String execute() throws Exception { // academy = academyservice.findById(academy.getAcaId());
    academy = academyservice.findById(this.getAcaId());
    departments = academy.getDepartments();
    content = "";
    for (Iterator<Department> iterator = departments.iterator(); iterator
    .hasNext();) {
    Department department = iterator.next();
    content += department.getDepId();
    content += "$";
    content += department.getDepName();
    content += "$"; }
    System.out.println(content); return null;
    } public Integer getAcaId() {
    return acaId;
    } public void setAcaId(Integer acaId) {
    this.acaId = acaId;
    } public Set<Department> getDepartments() {
    return departments;
    } public void setDepartments(Set<Department> departments) {
    this.departments = departments;
    } public String getContent() {
    return content;
    } public void setContent(String content) {
    this.content = content;
    }}
      

  24.   

    script该如何接收形如“4$数学$1$计算机科学与技术$”的content,我用下面的代码接收不到,var departments = xmlrequest.responseText.split("$"),该怎么写 高手指教
      

  25.   

    各位牛人好像都忽略了一个问题,struts1改为struts2除了配置文件(struts.xml,web.xml),action当中的变量,方法等,它们的jar包可不一样,这都不换,改了你也启动不了啊
      

  26.   

    现在成功了,把代码都贴一下 ,方便大家学习。package com.sign_up.action;import java.util.Iterator;
    import java.util.Set;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
    import com.sign_up.bean.Academy;
    import com.sign_up.bean.Department;
    import com.sign_up.service.AcademyService;public class AjaxDepartmentDataAction extends ActionSupport{
    private Academy academy;
    private Integer acaId;
    private AcademyService academyservice;
    private Set<Department> departments;
    private String content;
    private HttpServletResponse response;  public Academy getAcademy() {
    return academy;
    } public void setAcademy(Academy academy) {
    this.academy = academy;
    } public AcademyService getAcademyservice() {
    return academyservice;
    } public void setAcademyservice(AcademyService academyservice) {
    this.academyservice = academyservice;
    } public String execute() throws Exception {
    academy = academyservice.findById(this.getAcaId());
    departments = academy.getDepartments();
    content = "";
    for (Iterator<Department> iterator = departments.iterator(); iterator
    .hasNext();) {
    Department department = iterator.next();
    content += department.getDepId();
    content += "$";
    content += department.getDepName();
    content += "$"; }
    System.out.println(content);
    response = ServletActionContext.getResponse(); 
    response.setContentType("application/xml;charset=UTF-8"); 
    response.getWriter().write(content);  return null;
    } public Integer getAcaId() {
    return acaId;
    } public void setAcaId(Integer acaId) {
    this.acaId = acaId;
    } public Set<Department> getDepartments() {
    return departments;
    } public void setDepartments(Set<Department> departments) {
    this.departments = departments;
    } public String getContent() {
    return content;
    } public void setContent(String content) {
    this.content = content;
    } public HttpServletResponse getResponse() {
    return response;
    } public void setResponse(HttpServletResponse response) {
    this.response = response;
    }}
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
    + request.getServerName() + ":" + request.getServerPort()
    + path + "/";
    %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <script type="text/javascript">
    var xmlrequest;
    function createXMLHttpRequest() {
    if (window.XMLHttpRequest) {
    xmlrequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
    try {
    xmlrequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try {
    xmlrequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
    }
    }
    }
    }
    function change(id) {
    createXMLHttpRequest();

    var uri = "ajaxDepartmentData.action?acaId="+id;
         //  document.write(id);
           
    xmlrequest.open("POST", uri, true);
    xmlrequest.setRequestHeader("Content-Type",
    "application/x-www-form-urlencoded");
    xmlrequest.onreadystatechange = processResponse;
    xmlrequest.send(null);
    }
    function processResponse() {
    if (xmlrequest.readyState == 4) {
    if (xmlrequest.status == 200) {
      //  document.write("ok");
    var departments = xmlrequest.responseText.split("$")

    var displaySelect = document.getElementById("department");

    displaySelect.innerHTML = null;

    for ( var i = 0; i < departments.length - 2;) {
    var op = document.createElement("option");
    op.value = departments[i];
    op.innerHTML = departments[i + 1];
    displaySelect.appendChild(op);
    i += 2;
    }

    else {
    window.alert("您所请求的页面有异常:"+ xmlrequest.status);
    }
    }
    }function trim(s) {
    return s.replace(/^\s*/, "").replace(/\s*$/, "");
    }
    function check() {
    var errStr = "";
    if(trim(document.getElementById("name").value) == null || trim(document.getElementById("name").value) == ""){
    errStr += "\n年级名称不能为空";
    }

    if(errStr == "") {
    return true;
    }

    alert(errStr);
    return false;
    }
    </script>
    <base href="<%=basePath%>"> <title>增加年级</title> </head> <body>
    <br>
    <br>
    <br>
    <center>
    <h1>
    增加年级
    </h1>
    </center>
    <center>
    <form action="saveWorld" method="post" onsubmit="return check();">
    <table>
    <tr>
    <td>
    所在学院:
    </td>
    <td> <select name="world.department.academy.acaId"
    onchange="change(this.value);">
    <c:forEach items="${academy}" var="academy">
    <option value="${academy.acaId }">
    ${academy.acaName}
    </option>
    </c:forEach>
    </select> </td>
    </tr>
    <tr>
    <td>
    所在专业:
    </td>
    <td>
    <select name="world.department.depId" id="department">
    <c:forEach items="${departments}" var="department">
    <option value="${department.depId }">
    ${department.depName}
    </option>
    </c:forEach>
    </select>
    </td>
    </tr>
    <tr>
    <td>
    年级名称:
    </td>
    <td>
    <input type="text" id="name" name="world.worName" />
    </td>
    </tr>
    <tr>
    <td colspan="2" align="center">
    <input type="submit" value="提交">
    <input type="reset" value="重置">
    </td>
    </tr>
    </table>
    </form>
    </center>
    </body>
    </html>
      

  27.   

    academy = academyservice.findAll();// academy
    departments = academy.get(0).getDepartments();// departments for (Iterator<Department> iterator = departments.iterator(); iterator
    .hasNext();) {
    Department department = iterator.next();
    //System.out.println("depsize" + departments.size());

    worlds = department.get(0).getWorlds(); // worlds
    //System.out.println("worsize" + worlds.size());
    }请问怎么 department转换成一个list  我现在这么做worlds这个list有时候有值有时候没有值private List<Academy> academy;
    private List<Department> department;
    private AcademyService academyservice;
    private Set<Department> departments;
    private Set<World> worlds;
    private String content;