我有一种情况,我需要将我的 NAV 栏放在每页的顶部。因此,我决定在每个页面中包含一个新的 JSP,其中包含一个参数,指示用户所在的活动选项卡是什么。
我的实现如下。
仪表板.jsp
...
<s:include value="../tab-set.jsp">
<s:param name="tab_name" value="dashboard" />
</s:include>
...
选项卡集.jsp
<nav>
<ul>
<li <s:if test="param.tab_name == 'dashboard'">class="active"</s:if> >
<a href="dashboard">Dashboard</a>
</li>
<li <s:if test="param.tab_name == 'tab_2'">class="active"</s:if> >
<a href="suggestion">TAB 2</a>
</li>
</ul>
</nav>
结果是 IF 案例不会在两个选项卡上执行。
我也尝试过使用不同的方法,但它不像
<s:if test="#param.tab_name == 'dashboard'">
或
<s:if test="#attr.tab_name == 'dashboard'">
(在网上找到了一些地方)
或者我也尝试使用${param.tab_name}
在页面上打印tab_name
值的值,但没有任何反应。
但是它们都没有起作用。
请帮助我或指导我能做什么。
谢谢。
无法以这种方式访问参数,因为值堆栈不是在呈现的页面中创建的。尝试像请求参数一样访问它们${param.tab_name}
.
更新
应'dashboard'
<s:param>
标记的值,因为它是一个字符串。
<s:include value="../tab-set.jsp">
<s:param name="tab_name" value="'dashboard'" />
</s:include>
在您包含的页面中,使用${param.tab_name}
表示法获取tab_name
,并使用<s:set>
标签将其设置为其他变量。
<s:set name="tabName">
${param.tab_name}
</s:set>
<s:if test="#tabName == 'dashboard'">
</s:if>
这样就不需要使用纸币。
诀窍在于缺失的部分:
<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %>
然后,像这样做:
选项卡集.jsp
<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %>
<nav>
<ul>
<li <s:if test="#attr.tab_name == 'dashboard'">class="active"</s:if> >
<a href="dashboard">Dashboard</a>
</li>
<li <s:if test="#attr.tab_name == 'tab_2'">class="active"</s:if> >
<a href="suggestion">TAB 2</a>
</li>
</ul>
</nav>
享受
这是 struts2 中关于如何使用包含标签的文档:文档
请更改仪表板.jsp具有以下代码的文件:
<s:include value="../tab-set.jsp">
<s:param name="tab_name">dashboard</s:param>
</s:include>
如果您在"value"属性中声明了"字符串"值,Struts 2 将忽略它。