我有一种情况需要将我的NAV栏放在每页的顶部。所以我决定在每个页面中包含一个新的JSP,其中有一个参数,指示用户所在的活动选项卡是什么。
我的实施如下。
dashboard.jsp
...
<s:include value="../tab-set.jsp">
<s:param name="tab_name" value="dashboard" />
</s:include>
...
标签-set.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'">
OR
<s:if test="#attr.tab_name == 'dashboard'">
(在网上找到了一些地方)
或者我还尝试使用tab_name
在页面上打印${param.tab_name}
值的值,但没有发生任何事情。
但他们都没有工作。
请帮助我或指导我做些什么。
感谢。
答案 0 :(得分:2)
无法以这种方式访问参数,因为未在呈现的页面中创建valuestack。尝试像请求参数${param.tab_name}
一样访问它们。
<强>更新强>
<s:param>
标记的值应为'dashboard'
,因为它是一个字符串。
<s:include value="../tab-set.jsp">
<s:param name="tab_name" value="'dashboard'" />
</s:include>
在您收录的网页中,使用tab_name
表示法获取${param.tab_name}
并使用<s:set>
标记将其设置为其他变量。
<s:set name="tabName">
${param.tab_name}
</s:set>
<s:if test="#tabName == 'dashboard'">
</s:if>
这样就不需要使用scriplets了。
答案 1 :(得分:0)
这是struts2关于如何使用include标记的文档: documentation
答案 2 :(得分:0)
诀窍在于缺失的部分:
<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %>
然后,喜欢这个:
标签-set.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>
享受
答案 3 :(得分:0)
请使用以下代码更改 dashboard.jsp 文件:
<s:include value="../tab-set.jsp">
<s:param name="tab_name">dashboard</s:param>
</s:include>
如果在“value”属性中声明了“String”值,Struts 2将忽略它。