带有struts的Ajax

时间:2012-01-29 10:34:56

标签: java javascript ajax struts2

我在使用带有struts的ajax时遇到了问题 我想使用ajax加载依赖的下拉列表。我正在使用struts2。

以下是jsp的代码。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Enter Product</title>
<script type="text/javascript">

    var request;

    function findindex1()
    {
        var temp=document.getElementById("country").value;
        if(window.ActiveXObject){ request = new ActiveXObject("Microsoft.XMLHTTP"); } 
        else if(window.XMLHttpRequest){ request = new XMLHttpRequest(); } request.onreadystatechange = showResult; 
        request.open("POST",'temp.action?index='+temp,true); 
        request.send(null);
    }

    function showResult(){ 
        if(request.readyState == 4){
            alert(request.responseText+"1");
        document.getElementById("text").innerHTML=request.responseText; //Just to test
        var val=<%=request.getParameter("index") %> -

        /* document.getElementById("city").flush(); */
        }
        alert(request.responseText+"1");
        }

    function change(){
        var temp=document.getElementById("country").value;
        location.href='loadProduct.action';
    }

</script>
</head>
<body onload="fill()">
    <s:form method="post" action="product.action" name="product" theme="simple">
        <table id="table">
            <tr><td>Country</td><td><s:select id="country" name="country.countryId" list="countryList" listKey="countryId"
                        listValue="name" onchange="findindex1()" ></s:select></td></tr> 
            <tr>
                <td>City</td>
                <td><s:select id="city" name="city.id" list="cities" listKey="id"
                        listValue="name" headerKey="city.id" ></s:select></td>
            </tr>

            <tr>
                <td>Product Desc</td>
                <td><s:textfield name="product.description"></s:textfield></td>
            </tr>
            <tr>
                <td>Product Name</td>
                <td><s:textfield name="product.name"></s:textfield></td>
            </tr>
            <tr>
                <td><s:submit id="search" name="submit" value="Search"></s:submit></td>
                <td><s:submit name="submit" value="Create"></s:submit>
                </td>
            </tr>
                     <tr>
            <td></td>
            <td><s:label id="text" name="text">Text to change</s:label>
            </td>
        </tr>
    </table>
    </s:form>
</body>
</html>

我检查了代码,它在动作类中设置了List城市的值,用于更改jsp中国家/地区下拉列表的值。但是我无法反映jsp中的变化。

动作类功能是:

public String temp()
    {
        String[] id=(String[])getParameters().get("index");
        index=Integer.parseInt(id[0]);
        cities=(ArrayList<City>)productCreateService.selectCities(Integer.parseInt(id[0]));
        for(Iterator<Country> i=countryList.iterator();i.hasNext();)
        {
            Country c = i.next();
            if(c.getCountryId()==Integer.parseInt(id[0]))
            {
                Country c1= countryList.get(0);
                country=c;
                break;
            }
        }
        String out="";
        for(Iterator<City> i=cities.iterator();i.hasNext();)
        {

        }
        inputStream = new StringBufferInputStream("Hello World! This is a text string response from a Struts 2 Action.");
        return SUCCESS;
    }

所有变量都有吸气剂。我知道代码搞砸了。最初我为城市标签测试它。当那不起作用时,我尝试在一个简单的标签上测试(这里是id =“text”)。但即使这样也行不通。

模型,服务和DAO(虽然不在这里)都是正确的。

struts.xml文件如下。

<!-- Some or all of these can be flipped to true for debugging -->
<constant name="struts.i18n.reload" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.configuration.xml.reload" value="false" />
<constant name="struts.custom.i18n.resources" value="global" />
<constant name="struts.action.extension" value="action" />

<constant name="struts.serve.static" value="true" />
<constant name="struts.serve.static.browserCache" value="false" />

<constant name="actionPackages" value="com.oxxo.pilot.web.action" />

<package name="default" extends="struts-default"  namespace = "/">

     <global-results>
        <result name="custom_error">/jsp/exception.jsp</result>
        <result name="input">/jsp/fail.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception"
        result="custom_error" />

     <action name="temp" class="ProductAction" method="temp">
         <result type="stream">
            <param name="contentType">text/html</param>
            <param name="inputName">inputStream</param>
        </result>
    </action>
</package>

有人可以告诉我,我做错了什么。如果您需要代码的任何部分,请告诉我。谢谢。

0 个答案:

没有答案