0

ドロップダウン リストの昇順/降順オプションで UserNames をフィルター処理したいので、オプション (ASC/DESC) を選択するたびに、ユーザー名がその順序でそれぞれ並べ替えられます。

<script>

/* xmlhttpRequest send HTTP/HTTPS requests directly to a webServer and load the server    
   response data directly back into the script :) */

    var xmlHttp; 

    function showUser(str){ 

     xmlHttp = GetXmlHttpObject();

     if (xmlHttp==null)
     {
        alert ("Your browser does not support AJAX!");
        return;
     }

    var url = "http://localhost:8080/Shipping_Order/getcustomer_xml.jsp?order="+str;

     //force a fresh page to load because it's unique, not a page from the cache.
     url = url+"&sid="+Math.random();  

    //the onreadystatechange event is fired ones the request is sent back  
    xmlHttp.onreadystatechange = stateChanged;

    // sends the request to the server
    xmlHttp.open("GET",url,true);  
        xmlHttp.send();
  } // end of showUser()

  function stateChanged() 
  { 
    if (xmlHttp.readyState==4)
    {
    var xmlDoc = xmlHttp.responseXML.documentElement;

    document.getElementById("username").innerHTML   =                        
                  xmlDoc.getElementsByTagName("username")[0].childNodes[0].nodeValue;


    document.getElementById("city").innerHTML=                               
                  xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;


    document.getElementById("contact").innerHTML    = 
              xmlDoc.getElementsByTagName("contact")[0].childNodes[0].nodeValue;
    }
}

 function GetXmlHttpObject(){
  var xmlHttp=null;
  try{
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }catch (e){
    // Internet Explorer
    try{
       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch (e){
      xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
     }
  } // end catch outer

 return xmlHttp;
 } // end of GetXmlHttpObject                       
</script>

HTML コード

<form name="myOrderType" action="myOrderType.action">
<select id="order" onChange="showUser(this.value)">
    <option>Select a user name :</option>
    <option value="ASC">Ascending</option>
    <option value="DESC">Descending</option>
</select>
                     <%-- <s:select label="Select an Order"
                       name="order"
                       headerValue="DESC"
                       list="#{'1':'ASC', '2':'DESC'}" 
                    /> --%>
</form>

以下はコントローラークラスの orderList です

<s:iterator value="orderList">

 <tr>  
  <td><s:property id="username" value="username"/></td>
  <td><s:property id="city" value="city"/></td>
  <td><s:property id="contact" value="contact"/></td>                   
 </tr>          

</s:iterator>

struts.xml

<action name="listUser" class="com.view.OrderProcessingAction" method="listAllUser">
            <result name="success">/adminPanel.jsp</result>
</action>

//View クラス (Action Class) //ASC/DESC 順ですべてのユーザーを一覧表示します

public String listAllUser(){

        this.orderList = orderDaoFactory.listUser();
        System.out.println("execute called");
        return SUCCESS;
    }

//コントローラークラス (DAO ファクトリー)

public List<OrderProcessing> listUser() {
        HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
        Session session = HibernateUtil.getSessionFactory().openSession();
        List<OrderProcessing> orderList = null;

        String order = request.getParameter("order");

        try {

                orderList =(List<OrderProcessing>) session.createQuery("from OrderProcessing ORDER BY username" +order).list();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return orderList;
    }

私は今私の解決策を得ました。ありがとう仲間。しかし、そのコードを struts2 にデプロイする問題が発生しました。新しい問題は、「Struts2 を使用したドロップダウン リストの OnChange イベントでのアクションの呼び出し」です。

応答データをスクリプトに直接戻します:)

        var xmlHttp;
        function showUser(str) {
            xmlHttp = GetXmlHttpObject();
        if (xmlHttp == null) {
            alert("Your browser does not support AJAX!");
            return;
        }

        var url = "http://localhost:8080/Shipping_Order/getcustomer_xml.jsp?order="+str;

        //force a fresh page to load because it's unique, not a page from the cache.
        url = url + "&sid=" + Math.random();

        //the onreadystatechange event is fired ones the request is sent back  
        xmlHttp.onreadystatechange = stateChanged;

        // sends the request to the server
        xmlHttp.open("GET", url, true);
        xmlHttp.send();
    }

    function stateChanged() {
        if (xmlHttp.readyState == 4) {
            var xmlDoc = xmlHttp.responseXML.documentElement;
             $("#dropdowntable").empty();       
    for(var i=0;i<xmlDoc.getElementsByTagName("username").length;i++)
       {

$("#dropdowntable").append('<tr><td id="username"'+i+'>'+xmlDoc.getElementsByTagName("username")[i].childNodes[0].nodeValue+'</td><td id="city"'+i+'>'+xmlDoc.getElementsByTagName("city")[i].childNodes[0].nodeValue+'</td> <td id="contact"'+i+'>'+xmlDoc.getElementsByTagName("contact")[i].childNodes[0].nodeValue+'</td></tr>');
            /* $("#dropdowntable").append('<td id="city"'+i+'>'+xmlDoc.getElementsByTagName("city")[i].childNodes[0].nodeValue+'</td>');
             $("#dropdowntable").append('<td id="contact"'+i+'>'+xmlDoc.getElementsByTagName("contact")[i].childNodes[0].nodeValue+'</td></tr>');
            */
           }
            }
            }
    function GetXmlHttpObject() {
        var xmlHttp = null;
        try {
            // Firefox, Opera 8.0+, Safari
            xmlHttp = new XMLHttpRequest();
        } catch (e) {
            // Internet Explorer
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
        }
        return xmlHttp;
    }


//getcustomer_xml.jsp

String order = request.getParameter("order");
ResultSet rs = st.executeQuery("select username, contact, city from user ORDER BY username "+order);

while(rs.next())
{

    out.println("<user>");
    out.println("<username>"    +rs.getString(1)+   "</username>");
    out.println("<contact>"     +rs.getInt(2)+      "</contact>");
    out.println("<city>"        +rs.getString(3)+   "</city>");
    out.println("</user>"); 

}
rs.close();
st.close();
4

3 に答える 3

0

前に述べたように、jquery ajax()を使用して http 要求を行い、each()メソッドは応答 xml を反復します

于 2013-02-19T09:01:08.010 に答える
0

サーバー応答 xml の解析に問題があると思います。これは、AJAX 呼び出しを行うかなり古い方法です。JQuery などのより便利で堅牢な JS フレームワークを使用してみてください。そこでは、XML や JSON の解析がはるかに簡単になり、間違いを犯すことはほとんどありません。

jquery ajaxコール

于 2013-02-19T08:32:29.110 に答える
0

ここで「str」を設定していない場合を除いて、何も問題はありません

            var url = "http://localhost:8080/Shipping_Order/getcustomer_xml.jsp?order="+str;

str を空に設定した場合、結果は ASC 順である必要があり、str = "DESC" は結果を DESC 順で返します。

于 2013-02-19T08:04:30.663 に答える