打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JSP页面列表定制化
今天来总结一下最近自己刚刚才接触的一个jsp应用中常常会用到的功能——jsp页面列表定制化。那么我先来说说功能的大概流程。
首先在后台你需要一个页面来让用户选择需要将那些字段的数据显示在前台的列表中。然后将选择的字段都存到数据库中。随后在前台的显示页面中将数据库中存放指定要显示的字都读取出来,然后进行一系列的判断就可以将要显示的字段显示出来了。那么下面我来详细的说明如何实现jsp的页面列表定制化。
首先,你需要在数据库中建立一个表。比如叫AutoColumn。这个表的作用就是为了存放用户要显示的字段。下面是表的结构。
字段名称 字段说明
id 主键
type 这个字段保存的是应用中各个需要用到定制化功能的模块的编号。因为在应用中不同的模块可能需要显示的字段是不一样的,这个时候就需要用这个字段来区分那条记录是那个功能模块的了。
code 这里存放的是用户需要显示的字段的字段名称。
chinese 这里存放的是用户需要显示的字段的字段中文名称。
比如现在这里有一个用户表userinfo。这个表里有很多的字段。
字段名称 字段说明
userid 主键
username 用户名
sex 性别
age 年龄
address 家庭住址
phone 联系电话
email 电子邮箱
msn MSN账号
好了,这些准备都做好了以后就要开始真正的实现功能了。那么你这时候需要在后台有一个页面来让用户选择要显示那些字段。比如叫Check.jsp。那么下面是主要的代码。
---------------------------------------------------------------------------------------------------------------
<script language="javascript">
function goupdate() {
document.updatecolumn.submit();
}
</script>
<body bgcolor="E3EDFF">
<%
AutocolumnForm af = (AutocolumnForm)request.getAttribute("codecolumn");
String codecolumn = af.getCode_column();
%>
<CENTER>
<FONT SIZE="5">请选择要显示的字段</FONT><BR>
</CENTER>
<form name="updatecolumn" action="UpdateAction.do" method="post">
<input type="hidden" name="method" value="UpdateColumn">
<table  cellSpacing="0" cellPadding="0" align="center" border="0" bgcolor="E3EDFF">
<tr>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value ="username" <%if(codecolumn.indexOf("username") != -1){%>checked<%}%> >用户名</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value ="sex" <%if(codecolumn.indexOf("sex") != -1){%>checked<%}%> >性别</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value ="age" <%if(codecolumn.indexOf("age") != -1){%>checked<%}%> >年龄</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value="address" <%if(codecolumn.indexOf("address") != -1){%>checked<%}%> >家庭住址</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value="phone" <%if(codecolumn.indexOf("phone") != -1){%>checked<%}%> >联系电话</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value="email" <%if(codecolumn.indexOf("email") != -1){%>checked<%}%> >电子邮箱</td>
<td><INPUT TYPE="checkbox" NAME="code_column_page" value="msn" <%if(codecolumn.indexOf("msn") != -1){%>checked<%}%> >MSN账号</td>
</tr>
<input type="hidden" name="autocolumn_type" value="1">
<tr>
<td colspan=5 align="center"><input type="button" onClick="goupdate();" value="确定"></td>
</tr>
</table>
</form>
------------------------------------------------------------------------------------------------------------------------------------------
那么这个jsp就是为了让用户来选择那些字段显示在页面上。我来解释一下:
<%if(codecolumn.indexOf("username") != -1){%>checked<%}%> >
这里是为了从AutoColumn表中读取code字段的数据然后判断这个数据中是否包含username。如果包含的话那么就自动选择上。
<input type="hidden" name="autocolumn_type" value="1">
这里代表的就是说这个页面选择的是代码为1的模块定制化。
当表单提交后就到了像对应的UpdateAction.java中。下面是代码和注释。
------------------------------------------------------------------------------------------------------------------------------------------
public ActionForward UpdateColumn(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)throws Exception {
AutocolumnForm af = (AutocolumnForm) form;
String code = "";                         //字段的英文字符串
String chinese = "";                      //字段的中文字符串
//通过对传递过来的英文字段的数组进行分割得到中文和英文的字符串
if(af.getCode_column_page() != null) {
for(int ii = 0; ii < af.getCode_column_page().length; ii++) {
//这里调用getColumnCommentValue方法来通过英文字段名字得到相应的中文名字
chinese+=af.getColumnCommentValue(af.getCode_column_page()[ii]) + ",";
code += af.getCode_column_page()[ii] + ",";
}
}
af.setCode_column(code);
af.setComment_column(chinese);
AutocolumnBean ab = new AutocolumnBean();     //数据库操作类
ab.UpdateColumenByType(af);  //将中文和英文都写入数据库,这里值钱在数据库中先事先插入记录。那么执行这个方法的时候就是直接的进行update操作而不是insert操作。
//跳转到字段修改页面
response.sendRedirect("/autocolumn/ModifiableAction.do?method=ViewColumnByType&type="+af.getAutocolumn_type());
return null;
}
------------------------------------------------------------------------------------------------------------------------------------------
然后是相对应的AutocolumnForm 。
------------------------------------------------------------------------------------------------------------------------------------------
public class AutocolumnForm extends ActionForm {
private long id;             //序列号
private long autocolumn_type;                      //模块类型
private String code_column;                        //英文字段名称
private String comment_column;                     //中文字段名称
private String[] code_column_page;                 //从页面传递的时候保存的英文字段数组
private String[] comment_column_page;              //从页面传递的时候保存的中文字段数组
private Map comment_column_map;
public AutocolumnForm() {
this.comment_column_map = new HashMap();
comment_column_map.put("username", "用户名");
comment_column_map.put("sex", "性别");
comment_column_map.put("age", "年龄");
comment_column_map.put("address", "家庭住址");
comment_column_map.put("phone", "联系电话");
comment_column_map.put("email", "电子邮箱");
comment_column_map.put("msn", "MSN账号");
}
public String getColumnCommentValue(String key) {
return (String) this.comment_column_map.get(key);
}
------------------------------------------------------------------------------------------------------------------------------------------
这里省略了set/get方法。主要要说明的是构造方法和getColumnCommentValue方法。构造方法中向map中写入了很多用户表所有字段的字段名称和对应的中文。而getColumnCommentValue方法就是为了在UpdateAction中使用来获得字段的英文。因为在jsp中时候只能从checkbox中传递过来英文或者中文,因为这里是选择传递的英文,那么中文就需要遮掩获取后写入数据库。
这样基本就实现了可以选择要显示的字段并存到数据库中等待使用了。那么下面来说说前台如何显示。
假设前台显示的时候是在list.jsp中的。向对应的Action为ListAction.java。
下面是ListAction.java的代码。
------------------------------------------------------------------------------------------------------------------------------------------
public ActionForward list(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
// 声明数据库操作类
// 页码
int page = this.formatInt(request.getParameter("page"),1);
int type = this.formatInt(request.getParameter("type"),1);     //应用的模块的编号
AutocolumnBean ab = new AutocolumnBean();
BusinessBean bb = new BusinessBean();
List personsell = bb.getList(type, page);
//根据模块类型获得要显示出来的字段的英文和中文
request.getSession().setAttribute("codecolumn", ab.getCodeColumnByType(type));
request.getSession().setAttribute("commentcolumn", ab.getCommentColumnByType(type));
request.getSession().setAttribute("personsell", personsell);
request.setAttribute("sellCount", new Integer(bb.getSellCountByType(type)));
return mapping.findForward("list");
}
/**
* 格式化数字
* @param page
* @return
*/
public int formatInt(String page, int defaultValue) {
int pageNum = defaultValue;
if (page == null || page.equals("")) {
pageNum = defaultValue;
} else {
try {
pageNum = Integer.parseInt(page);
} catch (Exception ex) {
ex.printStackTrace();
pageNum = defaultValue;
}
}
return pageNum;
}
------------------------------------------------------------------------------------------------------------------------------------------
然后是list.jsp页面的主要代码。
------------------------------------------------------------------------------------------------------------------------------------------
<TABLE borderColor="#666666 "cellSpacing="0" cellPadding="1" border="1">
<TBODY>
<TR>
<TD vAlign="center" align="middle" width="5%">
<P align="center"><STRONG><FONT SIZE="" COLOR="blue">序号</FONT></STRONG></P>
</TD>
<%
AutocolumnForm af = (AutocolumnForm)request.getSession().getAttribute("codecolumn");
String code = af.getCode_column();
AutocolumnForm af2 = (AutocolumnForm)request.getSession().getAttribute("commentcolumn");
String comment = af2.getComment_column();
String[] comment_array = comment.split(",");
//这个循环就取出了要显示的字段的中文名称
for(int ii = 0;ii < comment_array.length;ii++) {
%>
<TD vAlign="center" align="middle" width="5%">
<P align="center"><STRONG><%=comment_array[ii]%></STRONG></P>
</TD>
<%}%>
</TR>
<!--开始循环数据-->
<%
List personsell = (List)request.getSession().getAttribute("personsell");
for(int i = 0; i < personsell.size(); i++) {
UserForm hdf = (UserForm)personsell.get(i);
%>
<TR >
<TD onclick="<%=url%>"><P><FONT SIZE="" COLOR="red"><%=i+1%></FONT></P></TD>
<%if(code.indexOf("username") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getUsername()%></P></TD>
<%}%>
<%if(code.indexOf("sex") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getSex()%></P></TD>
<%}%>
<%if(code.indexOf("age") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getAge()%></P></TD>
<%}%>
<%if(code.indexOf("address") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getAddress()%></P></TD>
<%}%>
<%if(code.indexOf("phone") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getPhone()%></P></TD>
<%}%>
<%if(code.indexOf("email") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getEmail()%></P></TD>
<%}%>
<%if(code.indexOf("msn") != -1) {%>
<TD onclick="<%=url%>"><P><%=hdf.getMsn()%></P></TD>
<%}%>
</TR>
<%}%>
<!--循环结束-->
------------------------------------------------------------------------------------------------------------------------------------------
到这里列表字段显示定制化功能就可以实现了。list中会读取到存在AutoColumn表中的相应记录的要显示的字段,并根据判断来显示出来。
那么大家如果有什么不明白的地方请及时的给我留言,我会及时更新文章来让大家更方面理解同时也提高自己的表达能力。谢谢。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Indexof(string xx)
Jacob操作Word
关于JSP静态化与伪静态的简单做法
纯jsp的自定义的单个文件上载代码
Java面试题
一个Web搜索程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服