aUpdate.onclick = function() {
            toUpdateUser(users[i]); 
          }因爲你的user是個對象,對象是按地址存放的,他只有一個值,[for(var item in users)]這個循環最好能改成用數組下標的形式,onclick結果如上。

解决方案 »

  1.   

    谢谢您!还是不行,按照您的方法将代码修改为:
    <%@ page language="java" import="java.util.*" pageEncoding="gb18030"%>
    <%
    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>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
        <script type='text/javascript' src='/CRUDtoUser/dwr/interface/userDAO.js'></script>
        <script type='text/javascript' src='/CRUDtoUser/dwr/engine.js'></script>
        <script type='text/javascript' src='/CRUDtoUser/dwr/util.js'></script>
        
        <script type="text/javascript">
          function initUser() {
            userDAO.getAllUsers(displayUser);
          }
          
          function displayUser(users) {
            var tbody = document.getElementById("tbody");
            
            for(var i = 0; i < users.length; i++) {
              var tr = document.createElement("tr");
              
              var tdUsername = document.createElement("td");
              tdUsername.innerText = users[i].username;
              tr.appendChild(tdUsername);
              
              var tdAddress = document.createElement("td");
              tdAddress.innerText = users[i].address;
              tr.appendChild(tdAddress);
              
              var tdEmail = document.createElement("td");
              tdEmail.innerText = users[i].email;
              tr.appendChild(tdEmail);
              
              // DOWN:
              var tdUpdate = document.createElement("td");
              
              var aUpdate = document.createElement("a");
              aUpdate.innerText = "修改";
              aUpdate.setAttribute("href", "#");
              aUpdate.onclick = function() {
                toUpdateUser(users[i]);
              }
              tdUpdate.appendChild(aUpdate);
              
              tr.appendChild(tdUpdate);
              // UP :
              
              tbody.appendChild(tr);
            }
          }
          
          function toUpdateUser(user) {
            dwr.util.setValues(user);
          }
          
          window.onload = function() {
            initUser();
          }
        </script>
      </head>
      
      <body>
        <table border="1">
          <thead>
            <tr>
              <th>username</th><th>address</th><th>email</th><th colspan="2">操作</th>
            </tr>
          </thead>
          <tbody id="tbody">
            
          </tbody> 
        </table>
        <p></p>
        <p></p>
        username:<input type="text" id="username"/><br>
        address :<input type="text" id="address"/><br>
        email &nbsp;&nbsp;:<input type="text" id="email"/><br>
        userid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<span id="userid">-1</span><br><br>
        <input type="button" value="保存"/>
      </body>
    </html>
    后,运行程序,单击任何一个“修改”链接,没有任何反应,没有任何信息被填入到下面的文本框与span标签中,IE也没有提示任何的错误。
    第一个需求“需求:访问index.jsp页面,就会显示出数据库中User表中的数据。”已经成功实现了,说明用  for(var item in users) {
              var user = users[item];这种方法遍历得到的每个对象是不同的(也就说明这些对象各自引用了不同的地址),为什么在订阅一个链接的单击事件:          aUpdate.onclick = function() {
                toUpdateUser(user);
              }时,所引用的就都是最后的那个对象呢?
      

  2.   

    你用的是同一個對象的,只不過給他在循環裏面賦了不同的值,但是你循環結束之後這個對象的值就是最後一個user了,
    因爲的你的onclick寫的都是toUpdateUser(user),而這個user在畫面顯示結束之後就只有一個值的,所以,你的所有的修改都顯示的最后一個對象。只要能把這些對象區分開就行了。
      

  3.   

    jiaxsheng,谢谢您!将代码改成用数组下标的形式<%@ page language="java" import="java.util.*" pageEncoding="gb18030"%>
    <%
    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>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">    
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="This is my page">
        <!--
        <link rel="stylesheet" type="text/css" href="styles.css">
        -->
        <script type='text/javascript' src='/CRUDtoUser/dwr/interface/userDAO.js'></script>
        <script type='text/javascript' src='/CRUDtoUser/dwr/engine.js'></script>
        <script type='text/javascript' src='/CRUDtoUser/dwr/util.js'></script>
        
        <script type="text/javascript">
          function initUser() {
            userDAO.getAllUsers(displayUser);
          }
          
          function displayUser(users) {
            var tbody = document.getElementById("tbody");
            
            for(var i = 0; i < users.length; i++) {
              var tr = document.createElement("tr");
              
              var tdUsername = document.createElement("td");
              tdUsername.innerText = users[i].username;
              tr.appendChild(tdUsername);
              
              var tdAddress = document.createElement("td");
              tdAddress.innerText = users[i].address;
              tr.appendChild(tdAddress);
              
              var tdEmail = document.createElement("td");
              tdEmail.innerText = users[i].email;
              tr.appendChild(tdEmail);
              
              // DOWN:
              var tdUpdate = document.createElement("td");
              
              var aUpdate = document.createElement("a");
              aUpdate.innerText = "修改";
              aUpdate.setAttribute("href", "#");
              aUpdate.onclick = function() {
                toUpdateUser(users[i]);
              }
              tdUpdate.appendChild(aUpdate);
              
              tr.appendChild(tdUpdate);
              // UP :
              
              tbody.appendChild(tr);
            }
          }
          
          function toUpdateUser(user) {
            alert(user.username);
            dwr.util.setValues(user);
          }
          
          window.onload = function() {
            initUser();
          }
        </script>
      </head>
      
      <body>
        <table border="1">
          <thead>
            <tr>
              <th>username</th><th>address</th><th>email</th><th colspan="2">操作</th>
            </tr>
          </thead>
          <tbody id="tbody">
            
          </tbody> 
        </table>
        <p></p>
        <p></p>
        username:<input type="text" id="username"/><br>
        address :<input type="text" id="address"/><br>
        email &nbsp;&nbsp;:<input type="text" id="email"/><br>
        userid &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:<span id="userid">-1</span><br><br>
        <input type="button" value="保存"/>
      </body>
    </html>
    之后,每个“修改”链接的单击事件所关联的方法中,执行的就是users[1]、users[2]、users[3]、users[4]、……,这样,这些user对象就分开了,可是,上面我提到了,单击任何一个“修改”链接,什么效果也没有,这时我在toUpdateUser()方法中加了一条调试语句:      function toUpdateUser(user) {
            alert(user.username);
            dwr.util.setValues(user);
          }这时,再单击任何一个“修改”链接,弹出一个对话框,标题:错误内容:出现了运行时间错误。
    是否要进行调试?行:64
    错误:'username' 为空或不是对象。进入调试,显示        alert(user.username);这一行有错误。再次请教!
      

  4.   

    你用的users的作用範圍多大?全局的?還是局部的?
    因爲看不到js怎麽寫的,有些問題只是猜測。
      

  5.   

    您好,所有的js代码就都在这个index.jsp文件中了,users变量是局部的。
      

  6.   

    问题已解决,谢谢您,请看此贴:http://topic.csdn.net/u/20080930/17/95e5c994-bfd4-4c38-a107-47446346fc94.html