您的位置:首页 > 运维架构 > 网站架构

网站导航路径实现

2014-04-18 12:55 471 查看

说明:
在开发系统或者其他网站的过程中,常常需要在页面中添加路径导航信息,如下图所示:





如果每次在请求的action中写,很麻烦,这里我将它封装成一个bean,提供一个方法,只需提供一些参数,便完成自动封装,然后将这个bean放到session中,这样路径信息可以得以保存,然后哪里需要用的话直接从session中取出来便可。

设计的Bean为DIirectUrlBean,其关键属性如下:

urlPath:拼接好的完整的url路径,传入jsp就会如图显示并且可点击。

partList:urlPath的模块集合。这里的模块是指一级一级的链接,比如图中的模块数为3,指urlPath中有3块链接。每次将每个模块的url片段拼接好后,就放入该list,最后一一取出list中的片段拼接成完整的导航路径。这样做而不是只接将urlPath拼好的原因是,这样可以实现方便的管理list中的模块数,比如修改或者删除等。其代码如下:

1DirectUrlBean

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项目。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: