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

时间:2012-12-07 11:18:27

标签: jsp struts2 jstl

我有一种情况需要将我的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}值的值,但没有发生任何事情。

但他们都没有工作。

请帮助我或指导我做些什么。

感谢。

4 个答案:

答案 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将忽略它。