首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

小弟我想問可否用Ajax取得用struts2 action從資料庫撈出來的值

2012-12-14 
我想問可否用Ajax取得用struts2 action從資料庫撈出來的值?我想問可否用Ajax取得用struts2 action從資料庫

我想問可否用Ajax取得用struts2 action從資料庫撈出來的值?
我想問可否用Ajax取得用struts2 action從資料庫撈出來的值?
因為我struts2已經與SPRING HIBERNATE整合好了
所以想說若要增加用AJAX的功能 是否可以讓AJAX取得ACTION回傳的值
而不用導頁 因為struts2 一導頁 有AJAX的頁面就全更新的
我下面的CODE是STRUTS會導回給自己 但這樣AJAX就有問題了

以下是我的CODE

------這是action的CODE--------------------------
package com.mkyong.user.action;

//import org.springframework.context.ApplicationContext;
//import org.springframework.context.support.FileSystemXmlApplicationContext;


//import java.awt.print.Book;

//import org.springframework.context.ApplicationContext;
//import org.springframework.context.support.FileSystemXmlApplicationContext;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.PrintWriter;

import com.mkyong.user.bo.UserBo;
import com.mkyong.user.hibernate.Book;
import com.mkyong.user.service.BookService;
import com.mkyong.user.service.BookServiceImpl;
import com.opensymphony.xwork2.ActionSupport;

public class UserSpringAction extends ActionSupport{

//DI via Spring
UserBo userBo;
//UserBo bookDAO;  //丟給SERVICE去處理了
BookService  bookService;

private String name;
private String price;
private String status;  //這要給false.jsp來判斷 拿到誰的


public UserBo getUserBo() {
return userBo;
}

public void setUserBo(UserBo userBo) {
this.userBo = userBo;
}



public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}



/*public UserBo getBookDAO() {
return bookDAO;
}

public void setBookDAO(UserBo bookDAO) {
this.bookDAO = bookDAO;
}  */  

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public String getPrice() {
return price;
}

public void setPrice(String price) {
this.price = price;
}



public BookService getBookService() {
return bookService;
}

public void setBookService(BookService bookService) {
this.bookService = bookService;
}
    


public String execute() throws Exception {
        // price  = userBo.queryBook(name);
       // Book book  =  bookDAO.getBook("yaya");
//    price =  book.getBookPrice();
         
     // ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
  // UserBo bookDAO = (UserBo) context.getBean("bookDAO");
  // Book book = bookDAO.getBook(name); //丟給SERVICE處理
  //BookService  bookService  =   new BookServiceImpl(); //用spring注入
  Book book = bookService.getBook(name);


  if(book==null){
  status="query";
  clearMessages();
  addActionMessage("查詢失敗~~!!!(大驚)"); 
  return "false";
  }else{
  name = book.getBookName();
  price = book.getBookPrice();
  return "success"; 
  }
  
}  
}

------------------struts.xml的code-------------------
//  ...
//   ..
<action name="userAjaxAction" 
            class="userSpringAction" >
            <result name="success">/pages/AjaxTest.jsp</result>
        </action>
-----------------AjaxTest.jsp的頁面--------------
<%@ page language="java" contentType="text/html; charset=BIG5"
    pageEncoding="BIG5"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>Insert title here</title>
<script type="text/javascript">
    window.onload =function(){
        setTrStyle();
        //Create Row
        var btnAdd = document.getElementById("myForm");
        
        btnAdd.onclick = function(){
            var txtTd = document.createTextNode("<s:property  value="name"/>");
            var eleTd = document.createElement("td");
            eleTd.appendChild(txtTd);  //<td>p</td>
            
            var txtTd1 = document.createTextNode(<s:property  value="price"/>);
            var eleTd1 = document.createElement("td");
            eleTd1.appendChild(txtTd1);  //<td>Q</td>
            
            
            var eleTr = document.createElement("tr");
            eleTr.appendChild(eleTd); //<tr><td>P</td></tr>
            eleTr.appendChild(eleTd1); //<tr><td>P</td><td>Q</td></tr>
            
            var theTable = document.getElementById("myTable");
            theTable.appendChild(eleTr);
            


            setTrStyle();
            
        }
    }
    
    function setTrStyle(){
        var trs = document.getElementsByTagName("tr");
        for(var i=0;i<trs.length;i++){
            trs[i].setAttribute("onmouseover","theColor=this.style.backgroundColor;this.style.backgroundColor='yellow'");
            trs[i].setAttribute("onmouseout","this.style.backgroundColor=theColor");
            
            if(i % 2 == 0){
                trs[i].style.backgroundColor = "pink";
            }
        }
    }
</script>
</head>
<body>
<s:form action="userAjaxAction" id="myForm" >  
  <s:textfield name="name" label="書名"/>  
  <s:submit  value="查詢"/>          
</s:form>
 <%--  <input id="buttonRowAdd" type="button" value="create Row" />  --%>
<table id="myTable" border="1" width="50%">
    <tr>
        <td>書名</td>
        <td>價錢</td>
    </tr>
    <tr>
        <td>BookName</td>
        <td>Price</td>
    </tr>
</table>

</body>
</html>

[最优解释]
你用浏览器访问userAjaxAction这个url后右键点击页面查看源代码看返回什么内容

ajax得到的就是那些内容。

action可以输出json之类的内容,然后客户端eval生成json对象,自己遍历更细一下dom对象就行了
[其他解释]
我現在改成用JSON還是不行 
--- action 一部分改成---
////...
////...
  return "false";
  }else{
  JSONArray json = JSONArray.fromObject(book);
  
  System.out.println(json);       
  result=json.toString();        
  return SUCCESS;
  }
  
}  
----------struts.xml  ---------
..........
<action name="userAjaxAction" class="userSpringAction" >
            <result  type="json">
            <param name="root">result</param>        
            </result>     
        </action>   
-------jsp部分改成---------



 <div id="result"></div>        
 <s:form name="userForm" action="/userAjaxAction.do" method="post">            
 書名:<input name="book.name"/><br/>                        
 <input id="btn" type="button" value=" 提 交 "/>        
 </s:form>
<script type="text/javascript">
$(document).ready(function(){   
 //点击提交按钮时,从服务端获取数据,然后在客户端显示   
  $("#btn").click(function(){      
   // 序列化表单的值      
   var params=$("input").serialize();   
   $.ajax({          
             url: "userAjaxAction.do", // 数据发送方式            
             type: "post",         // 接受数据格式            
             dataType : "json",    // 要传递的数据           
             data : params,        // 回调函数,接受服务器端返回给客户端的值,即result值         
             success : show           });  
             });}); 
    function show(result){  
               //测试result是否从服务器端返回给客户端    //alert(result);   
               //解析json对象    var json = eval("("+result+")");   
             var obj = "書名: "+json.name+"  價錢: "+json.price ; $("#result").html(obj);}
</script>


[其他解释]
确认进入show回调了吗?

  $.ajax({          
             url: "userAjaxAction.do", // 数据发送方式            
             type: "post",         // 接受数据格式            
             dataType : "json",    // 要传递的数据           
             data : params,        // 回调函数,接受服务器端返回给客户端的值,即result值         


             success : show           
,error:function(xhr){alert('出错鸟\n\n'+xhr.responseText)}//////增加error回调看看是不是出错了
});  
             });});

 
[其他解释]
這位熱心的版主  
我想先問一下
是不是要使用$.ajax 這種方法要先下載JQuery的JAR胞阿?
感覺我的$好像沒作用
[其他解释]
是啊。。$是jquery框架的缩写,一定要导入jquery才能使用
[其他解释]
我根據一些資料在修改後  再用firebug跑發現 每次都到 success show 這段就錯誤了
其實我很疑惑  雖然照著用JASON了 可是使用者打要查詢的資料不是因該給ACTION做處理嗎
為什麼JSP程式碼 還要用 var params=$("input").serialize(); 把參數序列化 
還有為什麼<s:form name="userForm" action="/userAjaxAction.do" method="post"> 
這action要用.do來表示 我的struts.xml只有 userAjaxAction 這樣可行嗎???

真是麻煩版主了 ˊˋ 這是我最後的CODE 有勞你費心了

-------------  jsp部分 ------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script src="/Struts2Example/js/jquery-1.8.2.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){   
 //点击提交按钮时,从服务端获取数据,然后在客户端显示   
   $("#btn").click(function(){      
       // 序列化表单的值      
       var params=$("input").serialize();   
         $.ajax({          
             url: "userAjaxAction.do", // 数据发送方式            
             type: "post",         // 接受数据格式            
             dataType : "json",    // 要传递的数据           
             data : params,        // 回调函数,接受服务器端返回给客户端的值,即result值         
             success : show           
         });  
     });
 }); 
    function show(result){  
               //测试result是否从服务器端返回给客户端    //alert(result);   


               //解析json对象    var json = eval("("+result+")");   
             var obj = "書名: "+json.name+"  價錢: "+json.price ; $("#result").html(obj);
             alert(obj);
    }
             
</script>

</head>
<body>

 <div id="result"></div>        
 <s:form name="userForm" action="/userAjaxAction.do" method="post">            
 書名:<input name="name"/><br/>                        
 <input id="btn" type="button" value=" 提 交 "/>        
 </s:form>

</body>
</html>

---------- struts.xml------------
<struts>
 <constant name="struts.devMode" value="true" />
 <constant name="struts.action.extension" value="do" />
<package name="default" namespace="/" extends="json-default">

<action name="userAjaxAction" class="userSpringAction" >
            <result  type="json">
            <param name="root">result</param>        
            </result>     
        </action>   
</struts>

---------------------- action部分程式碼   --------------
  .... 
.....   
  JSONObject json=JSONObject.fromObject(book);   
   //输出格式如:{"id":1, "username":"zhangsan", "pwd":"123"} 
   System.out.println(json);      
   result=json.toString();                     
  return SUCCESS;
....

热点排行