Struts2,无法使用 <s:include> 标签访问参数。想在 <s:if> 标签中使用它



我有一种情况,我需要将我的 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 将忽略它。

最新更新