【问题标题】:How to highlight an active element in the menu when clicked in Struts2 tiles?在 Struts2 磁贴中单击时如何突出显示菜单中的活动元素?
【发布时间】:2014-10-07 11:06:04
【问题描述】:

我正在使用带有瓷砖配置的 struts2。我在侧面菜单中有一些链接。因此,当转发新页面时,活动元素突出显示已被移除。我正在使用瓦片配置如下。

 <definition name="login-success" template="/mainTemplate.jsp">
        <put-attribute name="header" value="/header.jsp"/>    
        <put-attribute name="title" value="Welcome Page"/>   
        <put-attribute name="menu" value="/menu.jsp"/>   
        <put-attribute name="body" value="/Appointments/01_Dummy.jsp"/>   
        <put-attribute name="footer" value="/footer.jsp"/>   
    </definition>  

    <definition name="login-error" template="/mainTemplate.jsp">   
        <put-attribute name="title" value="Login Error"/>   
        <put-attribute name="body" value="/login-error.jsp"/>   
    </definition>  

     <definition name="appointment" extends="login-success">
      <put-attribute name="body"   value="/Appointments/02_FirstScreen.jsp"/>      
   </definition> 

我的菜单如下所示:

当我单击link1 时,它应该在正文中转发一个jsp。同时,link1 必须保持突出显示,直到我单击其他链接,例如 link2 或 Module2。

ma​​inTemplate.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<!--<title><tiles:getAsString name="title" /></title>-->
<title>ISIS Patient Monitoring Solution</title>
<link rel="shortcut icon" type="image/x-icon"
    href="../images/isis_logo.jpg" />
</head>
<style>
html, body {
    margin: 0;
    padding: 0;
    height: 100%;
}

#wrapper {
    min-height: 100%;
    position: relative;
}
#header {
    padding: 6px;
    background: #fff;
    height: 58px;
}

#sideMenu {
    padding: 6px;
    padding-bottom: px; /* Height of the footer element */
    height: 1 px;
}

* /
        #content {
    padding: 6px;
    padding-bottom: 10px; /* Height of the footer element */
    height: 2px;
    position: relative;
}

#footer {
    width: 100%;
    padding: 2px;
    height: 15px;
    position: absolute;
    bottom: 0;
    left: 0;
    background: #fff;
}
</style>

<body>
    <div id="wrapper">
        <div align="left" id="header">
            <tiles:insertAttribute name="header" />
        </div>
        <div id="sideMenu">
            <tiles:insertAttribute name="menu" />
        </div>
        <div align="center" id="content">
            <tiles:insertAttribute name="body" />
        </div>
        <div align="center" id="footer">
            <tiles:insertAttribute name="footer" />
        </div>
    </div>

</body>
</html>

我的菜单 jsp 如下所示:我使用 li 标签和锚标签作为链接。

Menu.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link type="text/css" rel="stylesheet"
    href="${pageContext.request.contextPath}/css/styles.css" />
<title>ISIS Patient Monitoring System</title>
<link rel="shortcut icon" type="image/x-icon"
    href="./images/isis_logo.jpg" />
<script src="http://code.jquery.com/jquery-latest.min.js"
    type="text/javascript"></script>
<script type="text/javascript" src="Javascripts/script.js">
</script>
</head>
<body>

    <div id='cssmenu'>
        <ul class="ui-state-focus">
            <li class='has-sub last'><a href='#'><span>Module-1</span></a>
                <ul id="tab2">
                    <li><a href='appointment'><span>Link 1</span></a></li>
                    <li><a href='#'><span>Link 2</span></a></li>

                </ul></li>
            <li class='has-sub last'><a href='#'><span>Module-2</span></a>
                <ul id="tab3">
                    <li><a href='#'><span>Company</span></a></li>
                    <li class='last'><a href='#'><span>Contact</span></a></li>
                </ul></li>
            <li class='last'><a href='#'><span>Contact</span></a></li>
        </ul>
    </div>
</body>
</html>

我用过li:active, li:visited and li:focus。没有用。加载新页面时突出显示消失。任何帮助将不胜感激。

【问题讨论】:

  • 高亮显示就像单选按钮组一样,当一个被按下时它被高亮显示,而其他的则没有被照亮。在某些情况下,您只需要检查哪个按钮处于活动状态并更新 css。
  • 那么,您希望我将所有 li 元素更改为单选按钮组吗?
  • 如果您正在重新加载页面,那么焦点将丢失。您必须自己处理恢复以前的选择以突出显示它。有几种方法可以做到这一点,我在this answer 中列出了其中的一些
  • 当使用单选按钮时,它解决了一半的问题(更新 css),但另一个问题仍然存在。

标签: css jsp struts2 tiles


【解决方案1】:

我会建议您使用一种机制来突出显示菜单中的选择。

第1步:在css中有一个高亮类。

在css中

// this is the only css which make selected menu appears different than other menu items
selected or highlighted 
{ 
 color: red;
 background: yellow;
}

这是您突出显示的课程。

第 2 步: 添加此类内容,使body 标签的 id 与 ullia 标签的组合出现。

css

 body#link1 a#link1,
 body#link2 a#link2,
 body#link3 a#link3,
 body#link4 a#link4{
         color: red;
        background: yellow;
 }

注意:这个类应该是css中的最后一个类,所以没有其他css覆盖这个类

第 3 步:在图块中传递一个新参数,该参数将是不同页面的 id。

tiles.xml

<definition name="appointment" extends="login-success">
  <put-attribute name="body"   value="/Appointments/02_FirstScreen.jsp"/>      
  <put-attribute name="menuselection"   value="link1"/>      
</definition> 

第 4 步: 在 menu.jsp 中使用该 tiles 参数

看下面的代码,我在body标签和a标签中添加了id

<body id="<tiles:insertAttribute name="menuselection" ignore="true" />">

<div id='cssmenu'>
    <ul class="ui-state-focus">
        <li class='has-sub last'><a href='#'><span>Module-1</span></a>
            <ul id="tab2">
                <li><a id="link1" href='appointment'><span>Link 1</span></a></li>
                <li><a id="link2" href='#'><span>Link 2</span></a></li>

            </ul></li>
        <li class='has-sub last'><a href='#'><span>Module-2</span></a>
            <ul id="tab3">
                <li><a id="link3" href='#'><span>Company</span></a></li>
                <li id="link4" class='last'><a href='#'><span>Contact</span></a></li>
            </ul></li>
        <li class='last'><a href='#'><span>Contact</span></a></li>
    </ul>
</div>
</body>

第 5 步: 使用与菜单的 lia 标记相同的 ID,根据您的 css 选择合适的任何内容。

第 4 步我已经将 id 添加到 a 标签,如果它不适合您获得突出显示,您也应该尝试使用 span 标签。

 <a id="link1" href='appointment'><span>Link 1</span></a>

对于不同的页面,在tiles.xml中使用不同的menuselection

<definition name="link2" extends="login-success">
   <put-attribute name="body"   value="/Appointments/somepage.jsp"/>      
   <put-attribute name="menuselection"   value="link2"/>      
</definition> 

这将突出显示链接 2。

现在另一种情况:如果你没有重新加载你的页面,那么你需要创建一个jquery函数来改变body标签的id。

在你的 js 文件中

function enablelink2highlight(){
    $("body").attr("id","link2");
}

在链接的点击事件上调用这个函数,很简单。

<a id="link2" href='#' onClick="enablelink2highlight();"><span>Link 2</span></a></li>

注意:确保您没有多个body 标签,但如果您有多个body 标签,您可以将class 赋予body 标签并在jquery 选择中过滤它。

我希望这个机制可以帮助你。请与我分享你的结果。所以我可以为您提供更多帮助。

【讨论】:

  • 您好,感谢您的回复。我已经通过将子链接 ID 和主链接 ID 与 jsp 转发一起传递来解决此问题。
猜你喜欢
  • 1970-01-01
  • 2013-08-12
  • 2014-09-14
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多