SMMS v1.11

#tech #bootstrap

这几天在重构一个原来做过的项目的前台页面。其实到现在我也不太明白SSH的架构,只是照着之前做好的程序在改,照猫画虎的样子。

采用了Bootstrap前端框架,感觉做出来还是挺简洁美观的。其间产生了一个问题就是sidebar导航栏的问题。

我想让sidebar作为一个模板,每次加载页面时引用进来即可,研究了一天才发现Struts有个tiles框架可以将页面插入页面中。(tile有磁贴的意思,贴瓷砖)本来是打算每个页面插入导航栏的,参考之前的项目发现自己想反了,即原始模板里包含导航栏,每次只需重新载入内容即可。这样问题得到解决,带有sidebar的模板完成。

接着又产生了新问题。导航栏条目的激活问题。原始页面中将激活项写成<li class="active">显示在页面里直接就是激活状态。我想改成动态响应激活的样子,也就是我点击之后再激活。所以去掉了class="active",插入了jQuery

<script type="text/javascript">
    $(function() {
        $("#phoneinfo").click(function(){
            $(".activie").removeClass("active");
            $(this).addClass("active");
        });
        $("#contactinfo").click(function(e) {
            $(".active").removeClass("active");
            $(this).addClass("active");
        });
    });
</script>
<script type="text/javascript">
    var tags=$("#sidebar").find("li"), temp;
    tags.click(function(){
        $(this).addClass("active").siblings().removeClass("active");
    });
</script>

其实上面两个方法达到的效果一样,只是这里记录一下。虽然方法没错,但是又产生问题,每次点击是会有个激活状态,但是松手之后也就是链接到新页面会重新加载页面,包括模板,也就是导航栏的激活状态消失了(因为我去掉了class="active"嘛)。

最后思来想去,还是决定将项目改回原来的不带模板的状态。参考其他采用bootstrap的各大网站,发现他们的页面里也是每个页面里重新写了一遍导航栏。总觉得这样没有模块化,但是想必有一定的理由吧(其实就是为了简单的实现active状态吧!!)。最后查了下,有说生成cookie,记录状态的,从而对导航栏激活,这对我来说有点太麻烦太难了,原谅我还那么渣。

今天北京下了入冬来第一场雪,很小很小,伴随着雾霾。早上翻了下黄历,说宜纳彩定盟,我就去把报名信息提交了。诶嘿。

ps:仅仅过了半小时,就通过别人解决了这个问题,我真是太笨了!! 只需要在action里添加页面跳转之后传参,即

return new ActionForward("/*******/phoneinfo.jsp?flag=1");

然后在frame.jsp中添加

<%
    int value = Integer.parseInt(request.getParameter("flag"));
%>
<li class="<%=value==1?"active":""%>">
……
<li class="<%=value==2?"active":""%>">

这样就解决了跳转后重载页面保证激活状态了。 真是太笨了我!