说明:在开发系统或者其他网站的过程中,常常需要在页面中添加路径导航信息,如下图所示:
如果每次在请求的action中写,很麻烦,这里我将它封装成一个bean,提供一个方法,只需提供一些参数,便完成自动封装,然后将这个bean放到session中,这样路径信息可以得以保存,然后哪里需要用的话直接从session中取出来便可。
设计的Bean为DIirectUrlBean,其关键属性如下:
urlPath:拼接好的完整的url路径,传入jsp就会如图显示并且可点击。
partList:urlPath的模块集合。这里的模块是指一级一级的链接,比如图中的模块数为3,指urlPath中有3块链接。每次将每个模块的url片段拼接好后,就放入该list,最后一一取出list中的片段拼接成完整的导航路径。这样做而不是只接将urlPath拼好的原因是,这样可以实现方便的管理list中的模块数,比如修改或者删除等。其代码如下:
1、DirectUrlBean:
package com.bbs.bean;
import java.util.ArrayList;
import java.util.List;
import com.bbs.utils.MyException;
public class DirectUrlBean {
private String showText= "";
private String actionName = "";
private String urlPath = "";
private List partList = new ArrayList();
public void init(int level,String actionName,String showText,String[] paramsList) throws MyException{
this.showText = showText;
this.actionName = actionName;
//如果路径中的模块信息已经存在至少一个,则根据点击的节点位置,截取之前的木块,之后的丢掉
if(level > 1 && partList.size() >= level-1){
Listtemp = new ArrayList();
for(int i=0;i< level-1;i++){
temp.add(partList.get(i));
}
partList = temp;
//如果还没有模块,则新添加一个
}else{
partList.clear();
}
//拼接一个完整的url
StringBuffer strBf = new StringBuffer();
if(partList.size()>0){
strBf.append(">>");
}
if(paramsList != null){
if(paramsList.length%2 != 0){
throw new MyException("请求参数的个数不符合要求!");
}
int n = paramsList.length/2;
strBf.append("").append(showText).append("");
}else{
strBf.append("").append(showText).append("");
}
//将拼接好的url存放到模块记录中
partList.add(strBf.toString());
}
public static void main(String[] args) throws MyException {
}
public String getShowText() {
return showText;
}
public void setShowText(String showText) {
this.showText = showText;
}
public String getUrlPath() {
return urlPath;
}
public void setUrlPath(String urlPath) {
this.urlPath = urlPath;
}
public List getPartList() {
return partList;
}
public void setPartList(List partList) {
this.partList = partList;
}
public String getActionName() {
return actionName;
}
public void setActionName(String actionName) {
this.actionName = actionName;
}
}2、包装成工具方法:SimpleToolUtil
public static String formatUrlPath(HttpSession session,int level, String actionName,
String showText, String[] paramsList) {
DirectUrlBean dbn;
String urlPath = "";
//如果session中没有这个bean则初始化bean,有则取出。
if(session.getAttribute("dirUrlBean")!= null){
dbn = (DirectUrlBean)session.getAttribute("dirUrlBean");
session.removeAttribute("dirUrlBean");
}else{
dbn = newDirectUrlBean();
}
try {
dbn.init(level,actionName, showText, paramsList);
//拼接urlPath,不重复拼接相同的路径
for(String str : dbn.getPartList()){
if(!urlPath.contains(showText))
urlPath += str;
}
dbn.setUrlPath(urlPath);
} catch (MyException e) {
e.printStackTrace();
}
session.setAttribute("dirUrlBean",dbn);
return urlPath;
}
在action中应用:
@SuppressWarnings("unchecked")
public String listTopics() throws MyException{
int pageNoVal;
int totalRows;
initContext();
topicList = newArrayList();
try {
int forumId = Integer.parseInt(forumIdStr.trim());
ForumBean frm = new ForumBean();
frm.setId(forumId);
forum = forumService.getOneForum(frm);
//分页处理:所有的分页实现需使用Page和PageService
//查询条件
String sql = "from TopicBean as tp where tp.forumName = '"
+ forum.getForumName() + "'";
//查询符合条件的记录总数
totalRows = pageService.getAllListNum(sql);
//查询所有主题数和今日新主题数
forum.setForumTotalTopics(totalRows);
forum
.setForumNewTopics(topicService
.getNewTopicsNum(forum.getForumName(),
SimpleToolUtil
.getUniqueDate(SimpleToolUtil.TODAY_START),
SimpleToolUtil
.getUniqueDate(SimpleToolUtil.TODAY_END)));
//获取页面传来的页面值
if(pageNo != null){
if(!pageNo.trim().equals(""))
pageNoVal = Integer.parseInt(pageNo);
else
pageNoVal = 1;
} else {
pageNoVal = 1;
}
page = new Page();
page.init(20, totalRows);
page.execute(pageNoVal);
topicList = pageService.getPageList(page.getStartRow(), page
.getPageSize(), sql);
} catch (Exception e) {
e.printStackTrace();
throw new MyException("在列出该板块的帖子信息的时候不小心出错了~");
}
SimpleToolUtil.formatUrlPath(request.getSession(),
1, "forum.action", "逝水流年", null);
this.naviUrl = SimpleToolUtil.formatUrlPath(request.getSession(),
2, "topicService.action", forum.getForumName(), new String[] {
"forumIdStr", forum.getId() + "" });
return SUCCESS;
}
Action中将工具方法返回的完整的urlPath路径复制给action的一个成员变量naviUrl,在jsp中显示。
这里只是部分代码,详细的代码参加bbs项目。