1

我有一种情况,我需要将我的 NAV 栏放在每一页的顶部。因此,我决定在每个页面中包含一个新的 JSP,该 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'"> (网上找了个地方)

或者我也尝试tab_name在页面上打印 value 的值,${param.tab_name}但没有发生任何事情。

但他们都没有工作。

请帮助我或指导我可以做什么。

谢谢。

4

4 回答 4

2

无法以这种方式访问​​参数,因为 valuestack 不是在渲染页面中创建的。尝试像请求参数一样访问它们${param.tab_name}

更新

tag的值<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>

这样就不需要使用脚本。

于 2012-12-07T11:24:13.613 回答
0

诀窍在于缺失的部分:

<% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %>

然后,喜欢 tihs:

标签集.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>

享受

于 2012-12-07T13:08:50.290 回答
0

这是 struts2 关于如何使用 include 标签的文档: documentation

于 2012-12-07T11:53:31.337 回答
0

请使用以下代码更改dashboard.jsp文件:

<s:include value="../tab-set.jsp">
    <s:param name="tab_name">dashboard</s:param>
</s:include>

如果您在“value”属性中声明了“String”值,Struts 2 将忽略它。

于 2016-06-09T11:39:00.580 回答