[谢谢您] DWR框架问题:单击“修改”,都显示“张十”、……

Drop1 2008-09-30 05:53:50
背景描述:使用的是Eclipse,使用了DWR框架。

需求:访问index.jsp页面,就会显示出数据库中User表中的数据。——此需求已成功实现。如下:

----------下面就是在index.jsp页面中显示的数据:
username address email 操作
张一 张一市 zhang1@126.com 修改
张二 张二市 zhang2@126.com 修改
张三 张三市 zhang3@126.com 修改
张四 张四市 zhang4@126.com 修改
张五 张五市 zhang5@126.com 修改
张六 张六市 zhang6@126.com 修改
张七七 张七七市 zhang77@126.com 修改
张九 张九市 zhang9@126.com 修改
张十 张十市 zhang10@126.com 修改


username: id属性的值为username的文本框
address: id属性的值为address的文本框
email: id属性的值为email的文本框
userid: id属性的值为userid的span标签。

----------上面就是在index.jsp页面中显示的数据:


需求:当单击“修改”链接时,相应的数据显示在下面的文本框与span中,可是,

现在的问题是:无论点击哪一个“修改”链接,在下面的文本框、span中显示的都是User表中的最后一条记录的信息。

----------以下是index.jsp代码。

<%@ 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 item in users) {
var user = users[item];

var tr = document.createElement("tr");

var tdUsername = document.createElement("td");
tdUsername.innerText = user.username;
tr.appendChild(tdUsername);

var tdAddress = document.createElement("td");
tdAddress.innerText = user.address;
tr.appendChild(tdAddress);

var tdEmail = document.createElement("td");
tdEmail.innerText = user.email;
tr.appendChild(tdEmail);

// DOWN:
var tdUpdate = document.createElement("td");

var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
aUpdate.setAttribute("href", "#");
aUpdate.onclick = function() {
toUpdateUser(user);
}
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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>

----------以上是index.jsp代码。


问题1:为什么点击任何一个“修改”链接,显示的都是User表中最后一条记录的信息?
问题2:如果使单击“修改”链接,就在下面的文本框与span标签中显示相应的信息?


请教各位朋友,谢谢您们!
...全文
153 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
accp206 2008-10-02
  • 打赏
  • 举报
回复
楼主,以上理解正确。(有结果映证啊,呵呵。)

别客气!呵呵。
Drop1 2008-10-02
  • 打赏
  • 举报
回复
[接上贴]


或改成:
index.jsp:

<%@ 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) {
dwr.util.removeAllRows("tbody");
dwr.util.addRows("tbody", users, cellFuncs, { escapeHtml : false });
}

var cellFuncs = [
function(user) { return user.username; },
function(user) { return user.address; },
function(user) { return user.email; },
function(user) {
return "<a href=\"javascript:toUpdateUser(" + userToString(user) + ")\">修改</a>"
}
];

//function toUpdateUser(user) {
//dwr.util.setValues(user);
//}
function toUpdateUser(user) {
DWRUtil.setValue("userid", user.userid);
DWRUtil.setValue("username", user.username);
DWRUtil.setValue("address", user.address);
DWRUtil.setValue("email", user.email);
}

function userToString(user) {
var u = "{ userid : " + user.userid + ",";
u += " username : '" + user.username + "',";
u += " address : '" + user.address + "',";
u += " email : '" + user.email + "' }";

return u;
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>

也成功实现。



谢谢accp206,敬佩!


问题1:
User.java实体类中的userid属性的类型是:int,那我们在连接字符串时:

function userToString(user) {
var u = "{ userid : " + user.userid + ",";
u += " username : '" + user.username + "',";
u += " address : '" + user.address + "',";
u += " email : '" + user.email + "' }";

return u;
}

最后拼成的字符串应当是 "userid : 3" 这样的形式,而不应当是 "userid : '3'" 这样的形式,虽然 "userid : '3'" 这样的形式不会出错,且也可以实现我们想要的需求,但标准的写法是:"userid : 3" ,对吗?


问题2:
我们向userToString()方法传入的是一个User实体类的对象,此方法返回一个这样形式的字符串:

"{ userid : 3, username : '张三', address : '张三市', email : 'zhang3@126.com' }"

,当将此字符串传递给toUpdateUser()方法时,JavaScript就不会再将它认为是一个字符串,而会将它认为是一个对象,所以,在此方法中,我们用

dwr.util.setValues(user);



dwr.util.setValue("userid", user.userid);
dwr.util.setValue("username", user.username);
dwr.util.setValue("address", user.address);
dwr.util.setValue("email", user.email);

都可以将值正确地赋值到下面的文本框与span标签中,以上理解对吗?


请求大家的指点,谢谢您!

Drop1 2008-10-02
  • 打赏
  • 举报
回复
按照11楼的思路,将代码改成:

index.jsp:

<%@ 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 item in users) {
var user = users[item];

var tr = document.createElement("tr");

var tdUsername = document.createElement("td");
tdUsername.innerText = user.username;
tr.appendChild(tdUsername);

var tdAddress = document.createElement("td");
tdAddress.innerText = user.address;
tr.appendChild(tdAddress);

var tdEmail = document.createElement("td");
tdEmail.innerText = user.email;
tr.appendChild(tdEmail);

// DOWN:
var tdUpdate = document.createElement("td");

var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
var u = "{ userid : " + user.userid + ", username : '" + user.username + "', address : '" + user.address + "', email : '" + user.email + "' }";
aUpdate.setAttribute("href", "javascript:toUpdateUser(" + u + ")");
tdUpdate.appendChild(aUpdate);

tr.appendChild(tdUpdate);
// UP :

tbody.appendChild(tr);
}
}

function toUpdateUser(user) {
//var u = eval('(' + user + ')');
dwr.util.setValues(user);
}
//function toUpdateUser(userid, username, address, email) {
//DWRUtil.setValue("userid", userid);
//DWRUtil.setValue("username", username);
//DWRUtil.setValue("address", address);
//DWRUtil.setValue("email", email);
//}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


后,成功实现!


或改成
index.jsp:

<%@ 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 item in users) {
var user = users[item];

var tr = document.createElement("tr");

var tdUsername = document.createElement("td");
tdUsername.innerText = user.username;
tr.appendChild(tdUsername);

var tdAddress = document.createElement("td");
tdAddress.innerText = user.address;
tr.appendChild(tdAddress);

var tdEmail = document.createElement("td");
tdEmail.innerText = user.email;
tr.appendChild(tdEmail);

// DOWN:
var tdUpdate = document.createElement("td");

var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
aUpdate.setAttribute("href", "javascript:toUpdateUser(" + userToString(user) + ")");
tdUpdate.appendChild(aUpdate);

tr.appendChild(tdUpdate);
// UP :

tbody.appendChild(tr);
}
}

function toUpdateUser(user) {
//var u = eval('(' + user + ')');
dwr.util.setValues(user);
}
//function toUpdateUser(userid, username, address, email) {
//DWRUtil.setValue("userid", userid);
//DWRUtil.setValue("username", username);
//DWRUtil.setValue("address", address);
//DWRUtil.setValue("email", email);
//}

function userToString(user) {
var u = "{ userid : " + user.userid + ",";
u += " username : '" + user.username + "',";
u += " address : '" + user.address + "',";
u += " email : '" + user.email + "' }";

return u;
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


也成功实现。
accp206 2008-10-02
  • 打赏
  • 举报
回复
{ escapeHtml : false }

在我给的代码中,是有的呢。嘿嘿
Drop1 2008-10-02
  • 打赏
  • 举报
回复
感谢大家的回复!

按照3楼的思路,将代码改成:

index.jsp:

<%@ 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='dwr/interface/userDAO.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>

<script type="text/javascript">

function initUser() {
userDAO.getAllUsers(displayUser);
}

function displayUser(users) {
DWRUtil.removeAllRows("tbody");
DWRUtil.addRows("tbody", users, [tdUsername, tdAddress, tdEmail, aUpdate]);
}

var tdUsername = function(user) { return user.username; };
var tdAddress = function(user) { return user.address; };
var tdEmail = function(user) { return user.email; };
var aUpdate = function(user) {
return "<a href=javascript:toUpdateUser('" + user.username + "');>修改</a>";
};

function toUpdateUser(username) {
document.all.username.value = username;
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


后,访问index.jsp,页面中第4列中显示的是:
<a href=javascript:toUpdateUser('张一');>修改</a>
<a href=javascript:toUpdateUser('张二');>修改</a>
<a href=javascript:toUpdateUser('张三');>修改</a>
<a href=javascript:toUpdateUser('张四');>修改</a>
<a href=javascript:toUpdateUser('张五五');>修改</a>
...
...
...

这样的代码,并没有显示链接。

加上{ escapeHtml : false },即:

index.jsp:


<%@ 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='dwr/interface/userDAO.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>

<script type="text/javascript">

function initUser() {
userDAO.getAllUsers(displayUser);
}

function displayUser(users) {
DWRUtil.removeAllRows("tbody");
DWRUtil.addRows("tbody", users, [tdUsername, tdAddress, tdEmail, aUpdate], { escapeHtml : false });
}

var tdUsername = function(user) { return user.username; };
var tdAddress = function(user) { return user.address; };
var tdEmail = function(user) { return user.email; };
var aUpdate = function(user) {
return "<a href=javascript:toUpdateUser('" + user.username + "');>修改</a>";
};

function toUpdateUser(username) {
document.all.username.value = username;
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


这样修改后,再访问index.jsp,成功实现需求。
Drop1 2008-10-02
  • 打赏
  • 举报
回复
7 楼的代码试验成功!
lyf_sust 2008-10-02
  • 打赏
  • 举报
回复
学习了。
accp206 2008-10-01
  • 打赏
  • 举报
回复
晕……
上帖中第4行的“重对应的JavaBean”应为“重写对应的JavaBean”
accp206 2008-10-01
  • 打赏
  • 举报
回复
呵呵,没想到楼主刚刚也改成功了呀。恭喜!

提醒楼主,不要老想着传对象给toUpdateUser()啦,呵呵。
你失败的原因:你拼在字符串中的user对象,将变成字符串。不会再是你原来的user对象。

如果一定要传user“对象”,你得在服务器端的Java代码中重对应的JavaBean(如果没猜错,应该是User.java文件吧?)的toString()方法,即其返回JSON字符串。然后在toUpdateUser()中使用eval()函数将该字符串转换成JavaScript对象,那就太麻烦啦,呵呵。

就用当前这种方法吧。已经挺好的啦。呵呵。
accp206 2008-10-01
  • 打赏
  • 举报
回复
楼主,我给你修改了一下。
请把你的页面替换成以下代码(或者也可以只替换JavaScript部分),保证你出正确结果,呵呵。

<%@ 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='dwr/interface/userDAO.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type='text/javascript' src='dwr/util.js'></script>

<script type="text/javascript">

function initUser() {
userDAO.getAllUsers(displayUser);
}

var cellFuncs = [
function( user ) { return user.username; },
function( user ) { return user.address; },
function( user ) { return user.email; },
function( user ) {
var params = "'" + user.username + "', '" + user.address + "', '" + user.email + "', '" + user.userid + "'";
return "<a href=\"javascript:toUpdateUser(" + params + ");\">修改</a>";
}
];

function displayUser(users) {
DWRUtil.removeAllRows( "tbody" );
DWRUtil.addRows( "tbody", users, cellFuncs, { escapeHtml : false } );
}

function toUpdateUser( username, address, email, userid ) {
dwr.util.setValue( "username", username );
dwr.util.setValue( "address", address );
dwr.util.setValue( "email", email );
dwr.util.setValue( "userid", userid );
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>
Drop1 2008-10-01
  • 打赏
  • 举报
回复
感谢大家的回复!

将index.jsp的代码改成:

<%@ 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 item in users) {
var user = users[item];

var tr = document.createElement("tr");

var tdUsername = document.createElement("td");
tdUsername.innerText = user.username;
tr.appendChild(tdUsername);

var tdAddress = document.createElement("td");
tdAddress.innerText = user.address;
tr.appendChild(tdAddress);

var tdEmail = document.createElement("td");
tdEmail.innerText = user.email;
tr.appendChild(tdEmail);

// DOWN:
var tdUpdate = document.createElement("td");

var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
aUpdate.setAttribute("href", "javascript:toUpdateUser("+user.userid+", '"+user.username+"', '"+user.address+"', '"+user.email+"')");
tdUpdate.appendChild(aUpdate);

tr.appendChild(tdUpdate);
// UP :

tbody.appendChild(tr);
}
}

//function toUpdateUser(user) {
//dwr.util.setValues(user);
//}
function toUpdateUser(userid, username, address, email) {
DWRUtil.setValue("userid", userid);
DWRUtil.setValue("username", username);
DWRUtil.setValue("address", address);
DWRUtil.setValue("email", email);
}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


后,问题解决!

但是,若用下面的代码:

index.jsp:

<%@ 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 item in users) {
var user = users[item];

var tr = document.createElement("tr");

var tdUsername = document.createElement("td");
tdUsername.innerText = user.username;
tr.appendChild(tdUsername);

var tdAddress = document.createElement("td");
tdAddress.innerText = user.address;
tr.appendChild(tdAddress);

var tdEmail = document.createElement("td");
tdEmail.innerText = user.email;
tr.appendChild(tdEmail);

// DOWN:
var tdUpdate = document.createElement("td");

var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
aUpdate.setAttribute("href", "javascript:toUpdateUser(" + user + ")");
tdUpdate.appendChild(aUpdate);

tr.appendChild(tdUpdate);
// UP :

tbody.appendChild(tr);
}
}

function toUpdateUser(user) {
dwr.util.setValues(user);
}
//function toUpdateUser(userid, username, address, email) {
//DWRUtil.setValue("userid", userid);
//DWRUtil.setValue("username", username);
//DWRUtil.setValue("address", address);
//DWRUtil.setValue("email", email);
//}

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   :<input type="text" id="email"/><br>
userid      :<span id="userid">-1</span><br><br>
<input type="button" value="保存"/>
</body>
</html>


,则访问index.jsp页面时,单击任何一个“修改”链接,不会弹出对话框,也没有任何信息显示在下面的文本框与span标签中,此时在IE状态栏的左下角会显示:

网页上有错误!

此时双击左下角的叹号图标,弹出一个对话框:

标题:Internet Explorer

内容:

此网页上的问题可能使其无法正常显示或正常运行。以后双击状态
栏中显示的警告图标即可显示此信息。

(一个复选框)当页面包含错误时,始终显示此消息(A)。

“确定”按钮 “隐藏详细信息(D)”按钮

下面的框中显示了详细信息:

行: 1
Char:22
错误:缺少']'
代码:0
URL: http://localhost:8080/CRUDtoUser

不能进入调试状态,所以,没能找到具体什么错误。



问题:我想向toUpdateUser()方法传一个user对象进去,为什么出上面的错误呢?如何能使之可以向toUpdateUser()方法传入user对象呢?

请求大家指点!
Drop1 2008-10-01
  • 打赏
  • 举报
回复
我正试着采用第二种方法自己先做一遍。
accp206 2008-10-01
  • 打赏
  • 举报
回复
想了想,对于楼主提出的要求,似乎找到了一种简单点的解决方案。
代码早就改好了,但是CSDN对连续回帖的次数有限制,所以现在才发。呵呵。

写了个userToString()的函数,负责user对象的转换。
请将相关的JavaScript代码替换成如下内容试试,呵呵。

<script type="text/javascript">

function initUser() {
userDAO.getAllUsers(displayUser);
}

function userToString( user )
{
var s = "{ username: \'" + user.username + "\' , ";
s += "address: \'" + user.address + "\' , ";
s += "email: \'" + user.email + "\' ,";
s += "userid: \'" + user.userid + "\' }";
return s;
}

var cellFuncs = [
function( user ) { return user.username; },
function( user ) { return user.address; },
function( user ) { return user.email; },
function( user ) {
return "<a href=\"javascript:toUpdateUser( " + userToString( user ) + " );\">修改</a>";
}
];

function displayUser(users) {
DWRUtil.removeAllRows( "tbody" );
DWRUtil.addRows( "tbody", users, cellFuncs, { escapeHtml : false } );
}

function toUpdateUser( user ) {
DWRUtil.setValue( "username", user.username );
DWRUtil.setValue( "address", user.address );
DWRUtil.setValue( "email", user.email );
DWRUtil.setValue( "userid", user.userid );
}

window.onload = function() {
initUser();
}
</script>
Drop1 2008-10-01
  • 打赏
  • 举报
回复
谢谢您,:)
accp206 2008-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ZHANGBINFLY 的回复:]
学习,楼主最好把全的文件传上来,如UserDao.js 及服务器端的java
[/Quote]

userDao.js中不过是一个简单的JavaScript代理对象,此文件由DWR生成,不会有错的。

楼主说页面上能出正确结果,由此可见,服务器端的Java代码也没有问题。

问题就出在页面上,原因及解决方案我都已经在1楼中说过啦。呵呵。

看样子,3楼对DWR比较熟悉哦,呵呵。
马老虎 2008-09-30
  • 打赏
  • 举报
回复
.js是不出错了?或是逻辑不对!
UP
_重剑无锋_ 2008-09-30
  • 打赏
  • 举报
回复
function displayUser(users) {
DWRUtil.removeAllRows("tbody");
DWRUtil.addRows("tbody",users,[tdUsername,tdAddress,tdEmail,
aUpdate]);
}

var tdUsername=function(unit){return unit.username;}
var tdEmail=function(unit){return unit.email;}
var tdAddress=function(unit){return unit.address;}
var aUpdate=function(unit){return "<a href=javascript:upd('"+unit.username+"')>修改</a>";}

function upd(username){
document.all.username.value=username;
}

用这个试试
ZHANGBINFLY 2008-09-30
  • 打赏
  • 举报
回复
学习,楼主最好把全的文件传上来,如UserDao.js 及服务器端的java
accp206 2008-09-30
  • 打赏
  • 举报
回复
var aUpdate = document.createElement("a");
aUpdate.innerText = "修改";
aUpdate.setAttribute("href", "#");
aUpdate.onclick = function() {
toUpdateUser(user);
}


用错了,呵呵。

在这儿请别使用onclick去使用事件回调!因为等你想回调的时候,那个user早已时过境迁,不是你所希望的user了哦。
直接使用href吧,形如:aUpdate.setAttribute( "href", "javascript:toUpdateUser('" + user.username + "');" );
注意,为了简单,我只让toUpdateUser接受了username,实际上toUpdateUser的参数可以有很多个,分别对应用户的每个可以修改的属性,这样在toUpdateUser()函数中,直接把参数中的值显示到相应的HTML标签中就够了。
如果toUpdateUser只接收username,则可以在toUpdateUser()函数中把username传给服务器端,实时获取用户信息。

67,518

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧