DWRUtil.addRows()
语法:
DWRUtil.addRows(id, array, cellfuncs, [options]);
描述:
向指定id的table元素添加行。它使用数组中的每一个元素在table中创建一行。然后用cellfuncs数组中的没有函数创建一个列。单元格是依次用cellfunc根据没有数组中的元素创建出来的。
DWR1.1开始,addRows()也可以用对象做为数据。如果你用一个对象代替一个数组来创建单元格,这个对象会被传递给cell函数。
你可以写一些像这样的伪代码:
for each member in array for each function in cellfuncs create cell from cellfunc(array[i])
参数:
- id: table元素的id(最好是tbody元素的id)
- array: 数组(DWR1.1以后可以是对象),做为更新表格数据。
- cellfuncs: 函数数组,从传递过来的行数据中提取单元格数据。
- options: 一个包含选项的对象(见下面)
选项包括:
- rowCreator: 一个用来创建行的函数(例如,你希望个tr加个css). 默认是返回一个document.createElement("tr")
- cellCreator: 一个用来创建单元格的函数(例如,用th代替td). 默认返回一个document.createElement("td")
实际使用:
1.根据输入查询,列表显示中加入删除按钮,输入参数动态检查功能。
类文件:UserPostInfoList
package com.ucbbs.dwr;
import java.util.*;
import java.sql.*;
import com.ucbbs.db.*;
public class UserPostInfoList {
private static final String getUserTopicInfoList = "select * from t_Topic where PostUID=? and PostTime<getDate()";
List lUserTopic = null;
List lUserPost = null;
public List getUserTopicList(int iUID){
DbTrans DBSQL = null;
CallableStatement cstmt = null;
ResultSet rs = null;
try{
lUserTopic = new Vector();
DBSQL = new DbTrans();
cstmt = DBSQL.conn.prepareCall(getUserTopicInfoList);
cstmt.setInt(1,iUID);
rs = cstmt.executeQuery();
while(rs.next()){
String mystr[] = {rs.getString("TopicID"),rs.getString("BoardsID"),rs.getString("Title"),"<input name='bt' type='button' value='删除' onclick='mySubmit("+rs.getString(1)+")'/>"};
lUserTopic.add(mystr);
lUserTopic.add(mystr);
}
}
catch(SQLException e ){
/*............省略..........*/
}
finally{
/*............省略..........*/
}
return lUserTopic;
}
public boolean delTopic(int iID){
DbTrans DBSQL = null;
CallableStatement cstmt = null;
boolean isOK = false;
try{
DBSQL = new DbTrans();
cstmt = DBSQL.conn.prepareCall(DEL_Topic);
cstmt.setInt(1,iID);
cstmt.executeUpdate();
isOK = true;
}
catch(SQLException e){
/*............省略..........*/
}
finally{
/*............省略..........*/
}
return isOK;
}
public boolean isNumber(String validString){
boolean isOK = false;
try{
if (validString==null) return false;
byte[] tempbyte=validString.getBytes();
for(int i=0;i<validString.length();i++) {
//by=tempbyte[i];
if((tempbyte[i]<48)||(tempbyte[i]>57)){
isOK = false;
}
else{
isOK = true;
}
}
}
catch(Exception e){
}
return isOK;
}
}
页面:
<%@ page language="java" contentType="text/html; charset=gb2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script src='/dwr/interface/uPostInfo.js'></script>
<script src='/dwr/engine.js'></script>
<script src='/dwr/util.js'></script>
<script>
var cellFuncs = [
function(data) { return data[0]; }, //因为得到的返回值是数组,可以用此方式取值
function(data) { return data[1]; },
function(data) { return data[2];}
];
function getList(){
DWRUtil.removeAllRows("apartmentsbody");
var id = document.all.strID.value;
uPostInfo.getUserTopicList(id,fillt);
document.all.resultTable.style.display = '';
}
function fillt(list){DWRUtil.addRows("apartmentsbody",list,cellFuncs);
}
function checkID(){ //strID的onChange事件执行此检查操作,并将结果给回调函数
uPostInfo.isNumber(replayID,DWRUtil.getValue("strID"));
}
function replayID(valid){ //参数1,检查结果;参数2,输入;参数3,信息显示ID;参数4,信息
processReply(valid, "strID", "id-error", "请输入正确的号码");
}
function processReply(valid, id, errid, error) {
if (valid) {
DWRUtil.setValue(errid, "");
$(id).style.color = "black";
}
else {
DWRUtil.setValue(errid, error);
$(id).style.color = "red";
$(id).focus();
}
}
</script></head>
<body>
<table width=350 border=0 cellpadding=0 cellspacing=1 height=44 align="center">
<tr>
<td width=84 height="42" align="center" bgcolor="#50C3FF"> 输入UC号: </td>
<td width="168" bgcolor="#CDEEFF"><input type="text" name="strID" onChange="checkID()"></td>
<td width="94" align="center" bgcolor="#CDEEFF"><input type="button" name="Submit" value="确定" onClick="getList()"></td><td width="101" align="center" bgcolor="#CDEEFF"><span id="id-error" class="error"> </span></td><!-- 此行用来显示错误信息-->
</tr>
</table>
<div id="resultTable">
<table width=350 border=1 cellpadding=0 cellspacing=1 height=44 align="center">
<thead>
<tr>
<th width="60" height="20">TopicID</th>
<th width="180" height="20">BoardsID</th>
<th width="80" height="20">Title</th>
</tr>
</thead>
<tbody id="apartmentsbody">
</tbody>
</table>
</div>
</body>
</html>
体会:
1.所参考的例子中,是使用类,向List添加对象,但是调试中却返回空.....只好修改为使用数组,这样所产生的性能问题....
2.回调函数的取值问题,也修改为数组操作。
例子2:实现下拉选择后,显示查询结果,点删除后自动更新列表。
页面
<%@ page language="java" contentType="text/html; charset=gb2312" %>
<%
String sysid= request.getParameter("sysid");
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>封禁用户查询</title>
<script src='/dwr/interface/unPostUser.js'></script>
<script src='/dwr/engine.js'></script>
<script src='/dwr/util.js'></script>
<script>
var cellFuncs = [
function(data) { return data[0]; },
function(data) { return data[1]; },
function(data) { return data[2];},
function(data) { return data[3]; },
function(data) { return data[4]; },
function(data) { return data[5]; }];
function getList(){
DWRUtil.removeAllRows("apartmentsbody");
var id = document.all.unPostUID.value;
var itype = document.all.type.value;
unPostUser.getUnpostUserSel(id,itype,fillt);
//document.all.resultTable.style = '';
}
function fillt(list){
//alert("2");
DWRUtil.addRows("apartmentsbody",list,cellFuncs);
}
function check(){
var uid =document.all.unPostUID.value;
if(uid==""){
document.all.unPostUID.focus();
alert("请输入要查询的号码");
}
}
function mySubmit(strID){
//document.all.unPostUID.value = strID;
//document.fform.submit();
unPostUser.setPostOK(strID,0,getList);//类添加删除方法后,在这里可以直接删除而不用提交
}
</script>
</head>
<body>
<form name=fform action="SetUnpost_Sel.jsp?sysid=<%=sysid%>" method="post">
<table width=800 border=0 cellpadding=0 cellspacing=1 height=33 align="center">
<tr>
<td width=126 height="31" align="center" bgcolor="#50C3FF"> 全区封禁用户查询</td>
<td width="256" bgcolor="#CDEEFF"> UC号:
<input type="text" name="unPostUID"></td>
<td width="334" align="left" bgcolor="#CDEEFF">
<select name="type" onFocus="check()" onChange="getList()">
<option value="-1">-请选择查询类型-</option>
<option value="1">---当前封禁---</option>
<option value="2">---过期封禁---</option>
</select></td>
</tr>
</table>
<div id="resultTable">
<table width=800 border=1 cellpadding=0 cellspacing=1 height=24 align="center">
<thead>
<tr bgcolor="#50C3FF">
<th width="123"><font color="#FFFFFF"><strong>被封用户</strong></font></th>
<th width="114"><font color="#FFFFFF">执罚者</font></th>
<th width="135"><font color="#FFFFFF">被封原因</font></th>
<th width="135"><font color="#FFFFFF">开始时间</font></th>
<th width="131"><font color="#FFFFFF">结束时间</font></th>
<th width="100"><font color="#FFFFFF">操作</font></th>
</tr>
</thead>
<tbody id="apartmentsbody">
</tbody>
</table>
</div>
</form>
</body>
</html>
类文件
import java.sql.*;
import java.util.*;
/**省略**/
public class UnpostUserSel {
private static final String GET_UNPOST_USER = "select UID,ManagerUID,UnpostReason,UnpostStartTime,UnpostEndTime,IsForever from t_Unpost where UID=? order by UID";
private static final String GET_OVER_UNPOST = "select UID,ManagerUID,UnpostReason,UnpostStartTime,UnpostEndTime,IsForever from t_Unpost where UID =? and UnpostEndTime < getDate() order by UID";
private static final String SET_POST_OK = "{call pr_setPostOK(?,?)}";
List userList = null;
public List getUnpostUserSel(int iUID, int iType) {
DbTrans DBSQL = null;
CallableStatement cstmt = null;
ResultSet rs = null;
AdminUser myAdmin = new AdminUser();
userList = new ArrayList();
try {
DBSQL = new DbTrans();
if (iType == 1) {
cstmt = DBSQL.conn.prepareCall(GET_UNPOST_USER);
}
if (iType == 2) {
cstmt = DBSQL.conn.prepareCall(GET_OVER_UNPOST);
}
cstmt.setInt(1, iUID);
rs = cstmt.executeQuery();
if (rs.next()) {
String str1 = "";
String str2 = "";
String str3 = "";
str1 = rs.getString(1);
str1 = myAdmin.getNickName(str1) + "【" + str1 + "】";
str2 = rs.getString(2);
str2 = myAdmin.getNickName(str2) + "【" + str2 + "】";
if (rs.getInt(6) == 1) {
str3 = "永久封禁";
} else {
str3 = rs.getString(5);
}
String str[] = { str1, str2, rs.getString(3), rs.getString(4),
str3,
"<input name='bt' type='button' value='解禁该用户' onclick='mySubmit("+rs.getString(1)+")'/>" };
userList.add(str);
} else {
String str[] = {"无封禁记录"};
userList.add(str);
}
}
catch (SQLException e) {/**省略**/}
finally { /**省略**/ }
return userList;
}
public void setPostOK(String UID, String BoardsID) {
DbTrans DBSQL = null;
CallableStatement cstmt = null;
try {
DBSQL = new DbTrans();
cstmt = DBSQL.conn.prepareCall(SET_POST_OK);
cstmt.setString(1,UID);
cstmt.setString(2,BoardsID);
cstmt.executeUpdate();
}
catch (SQLException e) {/**省略**/}
finally {/**省略**/}
}
分享到:
相关推荐
在你提供的实例中,“dwr实例,从后台取数据显示”表明这是一个使用DWR从服务器获取数据并在前端展示的简单应用。 1. **DWR的工作原理**:DWR通过在服务器上设置一个代理,允许JavaScript调用Java方法,就像它们是...
这个例子展示了如何在Web应用程序中使用DWR与Tomcat数据库连接池来实现Ajax交互,从而实现实时的客户端-服务器通信。 首先,我们需要了解DWR的基本工作原理。DWR允许JavaScript在用户的浏览器中直接调用服务器端的...
在这个项目中,我们关注的是如何使用DWR(Direct Web Remoting)框架来实现一个无需数据库支持的实时在线聊天应用,包括私聊和群聊功能。DWR是一种在浏览器和服务器之间进行实时通信的技术,它允许JavaScript与Java...
在数据库操作中,DWR可以帮助开发者实现实时的数据查询、插入、更新和删除。例如,你可以创建一个JavaScript函数,该函数调用DWR的接口,执行SQL查询并获取结果。这些结果可以直接在页面上显示,而无需重新加载页面...
在问题管理系统中,DWR扮演了关键角色,它极大地提高了用户体验,用户无需刷新页面就能获取或更新数据,如提交问题、查看状态等操作。 DBUtils是Apache组织提供的一个Java数据库连接工具,它简化了JDBC的使用。在本...
2. **创建Java服务接口**:定义一个包含分页查询方法的服务接口,例如`PageService.java`,该接口提供根据页码和每页大小获取数据的方法。 ```java public interface PageService { List<DataObject> getPage(int ...
// 实现获取数据的逻辑,可能从数据库或其他数据源中获取 List<MyObject> dataList = new ArrayList(); // 假设填充数据... return dataList; } ``` 这里的`MyObject`是你要返回的数据对象,可以根据实际需求...
本文将详细讲解如何使用Direct Web Remoting (DWR) 实现一个从数据库中获取数据的二级联动菜单,以及涉及到的相关技术。 **DWR(Direct Web Remoting)** 是一个开源的Java库,它允许JavaScript与服务器端的Java...
在使用DWR与数据库交互时,开发者通常会将数据库操作封装在Java类中,然后通过DWR暴露这些方法供JavaScript调用。例如,你可以创建一个`UserService`类,包含增删改查(CRUD)用户的方法,然后在DWR配置文件中声明这...
`addRows()` 方法会根据提供的数据自动生成`<tr>`和`<td>`元素,将数据填充到表格中。 3. DWR的核心优势: DWR提供了丰富的JavaScript API,使得在客户端操作和服务器端Java代码交互变得简单。它处理了诸如JSON序列...
DWR(Direct Web Remoting...这个项目不仅可以帮助开发者熟悉DWR技术,还能深入理解Ajax在实际应用中的使用,以及如何与数据库进行交互。通过实践,你可以提升Web开发的技能,更好地理解和运用实时交互的Web应用设计。
在这个"二级联动(连接数据池获取数据)"的场景中,DWR被用来在前端JS文件中获取来自后端Oracle数据库的数据,以实现联动下拉框的效果,这种效果常见于多级选择的表单中,如省市区的选择,当用户选择一个省份时,...
3. **使用Hibernate Tools**:运行Hibernate的hbm2ddl命令,它会根据Pojo类生成数据库DDL(Data Definition Language),自动创建或更新数据库表。 **学习资源与实践建议:** 对于初学者,可以通过搭建简单的SSH+...
DWR (Direct Web Remoting) 是一种开源的Java库,用于在Web应用程序中实现异步JavaScript和XML(AJAX)通信。...通过上述步骤,你可以配置和使用DWR在JSP页面中调用服务层的方法,实现动态数据的交互。
- 服务器端根据传入的页码参数查询数据库,获取对应页的数据,并返回给前端。 - 前端接收到数据后,动态替换或添加到页面的DOM元素中,完成分页效果。 **三、实战步骤** 1. **安装DWR框架**:将DWR库加入到项目...
### Spring 2中整合DWR 2:详细解析与实践 #### 一、Spring与DWR简介 在探讨如何在Spring 2框架中整合DWR 2之前,我们首先需要了解这两个技术的基本概念。 - **Spring框架**:Spring是目前Java开发中最流行的开源...
通过这个示例项目,学习者可以深入理解DWR2的工作原理,如何配置和使用DWR,以及如何在实际项目中利用DWR提高用户体验。同时,它也提供了实践机会,帮助开发者熟练掌握DWR2的各种特性和用法。在探索这个压缩包的过程...
- 编写Java服务:根据数据库结构(例如Ms SQL 2005中的表和字段),编写获取数据的服务,如获取省份、城市和区县的列表。 2. **数据库设计**: - 设计关联表:为了实现级联效果,数据库中的相关表需要有合适的...
在DWR与Struts2的结合使用中,DWR主要负责前端与后端的数据交互。它使得前端页面可以直接调用服务器端的Java方法,无需手动编写复杂的Ajax代码。例如,用户在Web界面操作后,DWR可以实时地将这些操作传递到服务器,...
- **用户列表展示**:可以创建一个简单的用户管理应用,前端使用DWR调用后端服务,获取并显示用户列表。 - **搜索功能**:添加一个搜索框,输入关键词后,DWR实时查询数据库并返回结果。 7. **错误处理和调试** ...