📄 tableformat.java
字号:
package tool;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.sql.*;
import javax.servlet.jsp.*;
public class TableFormat {
public int M_CHAR = 0; //字符排序
public int M_NUMBER = 1; //数字排序
public JspWriter out; //输出类
public Vector Cols = new Vector(); //列数组
public Vector Rows = new Vector(); //行数组
public Vector SubMenus = new Vector(); //菜单数组
public String HeadBKColor = "#ECEAE6"; //菜单背景颜色
public String HeadDarkColor = "#808080"; //菜单深色边界
public String HeadLightColor = "#ffffff"; //菜单浅色边界
public String THeadBKColor = "#ECEAE6"; //表头背景颜色
public String THeadDarkColor = "#808080"; //表头深色边界
public String THeadLightColor = "#ffffff"; //表头浅色边界
public String ContentSelColor = "#EFEFEF"; //表内容选中颜色
public String ContentUnSelColor = "#f7f5f0"; //表内容未选中颜色
public String url = ""; //系统请求的CGI文件名
public String paramString = ""; //系统请求的参数字符串
public String FormString = ""; //系统请求的Form格式
public String PrintFormString = ""; //系统打印请求的Form格式
public String OrderBy = ""; //排序列
public String Direction = "UP"; //排序方向
public int CurPage = 1; //当前显示的页码
public int PageSize = 2; //每页显示的记录数
public int PageNum = 1; //总的页数
public boolean ifhead = true; //是否输出按钮
public boolean ifcolsort = true; //是否列排序
public boolean ifdetail = true; //是否详细
public boolean ifheadpage = false; //是否数出首页
public boolean ifinput = false; //是否输出录入按钮
public boolean ifchange = false; //是否修改
public boolean ifframe = false; //是否详细信息在父窗口显示
public boolean ifdel = false; //是否删除
public boolean ifprint = false; //是否打印
public boolean ifprinttab = false; //是否打印边框
public String printurl = ""; //打印url
public String FormName = "report";
public String PrintFormName = "printform";
public boolean IfOrder = true;
//是否自己排序,true :输入的数据未排序,需系统排序;false:输入的数据已排序,不需要系统排序。
public boolean ifpage = false;
//是否自己分页,false输入的数据已经分页,true输入的数据未分页。
public boolean IfForm = true;
//是否Form方式提交请求:false;采取Get方式; true:采取Form的Post方式
private HttpServletRequest req;
public TableFormat(JspWriter newOut, HttpServletRequest request) {
//构造函数
out = newOut;
req = request;
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String tmpname = e.nextElement().toString().trim();
if (tmpname.equals("CurPage")) {
CurPage = Integer.parseInt( (request.getParameter(tmpname) != null ?
request.getParameter(tmpname) : "1"));
}
else if (tmpname.equals("OrderBy")) {
OrderBy = request.getParameter(tmpname);
}
else if (tmpname.equals("Direction")) {
Direction = request.getParameter(tmpname);
}
}
}
private void MakeForm(HttpServletRequest request) throws Exception { //生成POST方法的FORM
FormString = "";
FormString += "<form name=" + FormName + " method=POST action=" + url + ">";
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String tmpname = e.nextElement().toString().trim();
if (tmpname.equals("CurPage")) {
CurPage = Integer.parseInt( (request.getParameter(tmpname) != null ?
request.getParameter(tmpname) : "1"));
}
else if (tmpname.equals("OrderBy")) {
OrderBy = request.getParameter(tmpname);
}
else if (tmpname.equals("Direction")) {
Direction = request.getParameter(tmpname);
}
else {
for (int i = 0; i < request.getParameterValues(tmpname).length; i++) {
if (request.getParameterValues(tmpname)[i] != null) {
FormString += "<input type=hidden name=" + tmpname + " value=" +
UserTools.GBKConverter(request.getParameterValues(tmpname)[i]) + ">";
}
else {
FormString += "<input type=hidden name=" + tmpname + " value=" +
request.getParameterValues(tmpname)[i] + ">";
}
}
}
}
FormString += "<input type=hidden name=CurPage value=" + CurPage + ">";
FormString += "<input type=hidden name=OrderBy value=" + OrderBy + ">";
FormString += "<input type=hidden name=Direction value=" + Direction + ">";
FormString += "</form>";
}
private void MakeQueryString(HttpServletRequest request)
//生成请求的参数字符串
{
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String tmpname = e.nextElement().toString().trim();
if (tmpname.equals("CurPage")) {
CurPage = Integer.parseInt(request.getParameter(tmpname));
}
else if (tmpname.equals("OrderBy")) {
OrderBy = request.getParameter(tmpname);
}
else if (tmpname.equals("Direction")) {
Direction = request.getParameter(tmpname);
}
else {
for (int i = 0; i < request.getParameterValues(tmpname).length; i++) {
if (request.getParameterValues(tmpname)[i] != null) {
paramString += tmpname + "=" +
UserTools.GBKConverter(request.getParameterValues(tmpname)[i]) + "&";
}
else {
paramString += tmpname + "=" +
request.getParameterValues(tmpname)[i] + "&";
}
}
}
}
//去掉最后的“&”字符
if (paramString.trim().length() > 0) {
if (paramString.substring(paramString.length() - 1).equals("&")) {
paramString = paramString.substring(0, paramString.length() - 1);
}
}
}
public void AddCol(String title, String align, int m_width, String m_field,
int m_sorttype)
//添加表格的列:title为列标题;align:为列的对其方式
{
Cols.addElement(new Col(title, align, m_width, m_field, m_sorttype));
}
public void AddCol(String title, int m_width, String m_field, int m_sorttype)
//添加表格的列:title为列标题;对其方式为系统的却省
{
Cols.addElement(new Col(title, m_width, m_field, m_sorttype));
}
public void AddRow(String[] m_row, String m_link)
//添加表格的行数据:m_row 为行数据数组;m_link 为该行数据的连接URL,一般为查看该行数据详细信息的连接
{
Rows.addElement(new Row(m_row, m_link));
}
public void AddRow(String[] m_row, String m_link, String m_dellink,
String m_changelink)
//添加表格的行数据:m_row 为行数据数组;m_link 为该行数据的连接URL,一般为查看该行数据详细信息的连接
{
Rows.addElement(new Row(m_row, m_link, m_dellink, m_changelink));
}
public void AddRow(String[] m_row, String m_link, String m_bgcolor)
//添加表格的行数据:m_row 为行数据数组;m_link 为该行数据的连接URL,一般为查看该行数据详细信息的连接
{
Rows.addElement(new Row(m_row, m_link, m_bgcolor));
}
public void AddRow(String[] m_row, String m_link, String m_dellink,
String m_changelink, String m_bgcolor)
//添加表格的行数据:m_row 为行数据数组;m_link 为该行数据的连接URL,一般为查看该行数据详细信息的连接
{
Rows.addElement(new Row(m_row, m_link, m_dellink, m_changelink, m_bgcolor));
}
public void AddMenu(String m_title, String m_link, int m_width)
//增加系统的子菜单:m_title 为菜单的标题;m_link 为该菜单的连接URL;m_width 未菜单的宽度
{
SubMenus.addElement(new SubMenu(m_title, m_link, m_width));
}
public void Print() throws Exception
//数据输出到浏览器
{
if (IfOrder) {
OrderData(); //排序数据
}
if (ifpage) {
if (Rows.size() % PageSize == 0) {
PageNum = Rows.size() / PageSize;
}
else {
PageNum = Rows.size() / PageSize + 1;
}
}
if (IfForm) {
MakeForm(req); //生成Form字符串
out.println(FormString);
}
else {
MakeQueryString(req); //生成Get字符串
//PrintStyle(out);//输出样式单
}
if (ifhead) {
PrintHead(out); //输出系统菜单和导航按钮
}
int m_width = 90;
for (int i = 0; i < this.Cols.size(); i++) {
m_width += ( (Col)this.Cols.elementAt(i)).width;
}
if (ifprinttab) {
out.println("<table id=t1 name=t1 cellspacing=0 cellpadding=0 border=1 class=bgtable align=center height=80% width=" +
m_width + ">");
}
else {
out.println("<table id=t1 name=t1 cellspacing=1 cellpadding=0 border=0 class=bgtable width=" +
m_width + ">");
}
PrintCol(out); //输出表格的列
PrintRow(out); //输出表格数据
out.println("</table>");
}
/*******************************************************************
*模块名:分页查询模块
*功 能:使用逆向指针,每页取出TableFormat实例中指定的pageSize条记录
*输入参数:String sel_sql,String from_sql,String condition_sql,Connection conn
*参数说明:sel_sql:选取字段字符串,from_sql from表字符串,String condition_sql 查询条件串,带着where
*输出参数:ResultSet rs
*相关数据表单
*错误信息代码:
*编写者:DWQ
*开发日期:2003-05-13
*修改日期:
*版本号:
*备 注:
* *****************************************************************/
public ResultSet executeQuery(Connection conn, String sel_sql,
String from_sql, String condition_sql) throws Exception{
ResultSet rs = null;
ResultSet rs_count = null;
String sql = sel_sql + "" + from_sql;
String sql_count = "select count(1) " + from_sql;
int curpage = 1;
if (req.getParameter("CurPage") != null) {
curpage = Integer.parseInt(req.getParameter("CurPage"));
}
int maxRowCount = 0;
int count = 0;
if (!condition_sql.trim().equals("")) {
sql = sql + " " + condition_sql;
sql_count = sql_count + " " + condition_sql;
}
sql = sql + " order by " + this.OrderBy + " " + this.Direction;
//out.println(sql);
try {
Statement stat_count = conn.createStatement(); //用于查询总数的快照查询
//用于分页的逆向指针查询
Statement stat = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs_count = stat_count.executeQuery(sql_count);
if (rs_count.next()) {
maxRowCount = rs_count.getInt(1); //总行数
}
this.PageNum = (maxRowCount - 1) / this.PageSize + 1; //页数
if (this.PageNum == 0) {
this.CurPage = 0;
}
rs = stat.executeQuery(sql);
if (maxRowCount > 0) {
rs.absolute( (curpage - 1) * this.PageSize + 1); //如果有记录,将游标移至由显示的页码处
}
}
catch (SQLException e) {
out.println("err: " + e.toString() + "</br>" + "sql is " + sql);
}
return rs;
}
private void OrderData()
//数据排序
{
int orderbyid = 0;
int orderbytype = M_CHAR;
for (int i = 0; i < this.Cols.size(); i++) {
Col col = (Col)this.Cols.elementAt(i);
if (col.field.equals(this.OrderBy)) {
orderbyid = i;
orderbytype = col.sorttype;
break;
}
}
if (orderbytype == M_CHAR) {
if (!this.Direction.equals("DESC")) {
this.QuickSortS(0, this.Rows.size() - 1, orderbyid, 0);
}
else {
this.QuickSortS(0, this.Rows.size() - 1, orderbyid, 1);
}
}
else {
if (!this.Direction.equals("DESC")) {
this.QuickSortN(0, this.Rows.size() - 1, orderbyid, 0);
}
else {
this.QuickSortN(0, this.Rows.size() - 1, orderbyid, 1);
}
}
}
private void PrintHead(JspWriter out1) throws Exception
//输出系统菜单和导航按钮
{
int m_width = 90;
for (int i = 0; i < this.Cols.size(); i++) {
m_width += ( (Col)this.Cols.elementAt(i)).width;
//输出子菜单
}
out1.println("<table border=0 cellpadding=0 width='" + m_width +
"' cellspacing=\"0\">");
out1.println("<TR>");
if (SubMenus.size() > 0) {
out1.println("<TD width=5 valign=top>");
out1.println("<img height=22 src='/images/toolbar1.gif' width=5>");
out1.println("</TD>");
PrintMenu(out1);
out1.println("<TD width=5 valign=top>");
out1.println("<img height=22 src='/images/toolbar1.gif' width=5>");
out1.println("</TD>");
}
out1.println("<TD> </TD>");
//输出打印按钮
if (ifprint) {
out1.println("<TD align=right width=100><a style='cursor:hand' onclick=\"javascript:window.open('" +
printurl + "')\"><img src='/images/printpage.gif'></a></TD>");
}
//输出页次
out1.println("<TD align=right width=200>共 <font color=red>" + PageNum +
"</font> 页 当前第 <font color=red>" + CurPage +
" </font>页 </TD>");
//输出跳转输入框
if (PageNum > 1) {
out1.println("<TD align=right width=70>转到<input size=3 class=myinput name='go' onkeydown='return go_onkeydown()'>页</TD>");
out1.println("<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>");
out1.println("<!--");
out1.println("function ltrima( val )");
out1.println("{");
out1.println(" var retstr;");
out1.println(" var tmpstr;");
out1.println(" retstr=new String();");
out1.println(" tmpstr=new String(val);");
out1.println(" var i; ");
out1.println(" for(i=0;i<tmpstr.length;i++)");
out1.println(" {");
out1.println(" if(tmpstr.substring(i,i+1)!=' ') break; ");
out1.println(" }; ");
out1.println(" retstr=tmpstr.substring(i,tmpstr.length);");
out1.println(" return retstr;");
out1.println("}");
out1.println("function rtrima( val )");
out1.println("{");
out1.println(" var retstr;");
out1.println(" var tmpstr;");
out1.println(" retstr=new String();");
out1.println(" tmpstr=new String(val);");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -