【问题标题】:Struts2, Cannot access param using <s:include> tag. Want to use it in <s:if> tagStruts2,无法使用 <s:include> 标记访问参数。想在 <s:if> 标签中使用它
【发布时间】:2012-12-07 11:18:27
【问题描述】:

我有一种情况需要将 NAV 栏放在每个页面的顶部。因此,我决定在每个页面中包含一个新的 JSP,该 JSP 具有一个参数,指示用户所在的活动选项卡是什么。

我的实现如下。

dashboard.jsp

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

tab-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 案例不在两个选项卡上执行。

我也尝试过不同的方法,但效果不佳

&lt;s:if test="#param.tab_name == 'dashboard'"&gt;

或

&lt;s:if test="#attr.tab_name == 'dashboard'"&gt;(在网上找到了一些地方)

或者我也尝试使用${param.tab_name} 在页面上打印tab_name 的值,但没有任何反应。

但它们都不起作用。

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

谢谢。

【问题讨论】:

    标签: jsp struts2 jstl


    【解决方案1】:

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

    更新

    &lt;s:param&gt; 标签的值应该是'dashboard',因为它是一个字符串。

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

    在您包含的页面中,使用${param.tab_name} 表示法获取tab_name,并使用&lt;s:set&gt; 标记将其设置为其他变量。

    <s:set name="tabName">
       ${param.tab_name}
    </s:set>
    <s:if test="#tabName == 'dashboard'">
    </s:if>
    

    这样就不需要使用脚本了。

    【讨论】:

    • 抱歉,没能看懂。你的意思是我在 Action 类的request 中设置了tab_name 参数并在JSP 上使用它
    • 好的,我也尝试了你告诉我的方式,但它仍然无法正常工作......我只是打印我从父母那里收到的值,它会打印空白字符串。我使用了${param.tab_name},它没有打印任何东西。
    【解决方案2】:

    诀窍在于缺失的部分:

    &lt;% pageContext.setAttribute("tab_name" , request.getParameter("tab_name")); %&gt;

    那么,就这样吧:

    tab-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>
    

    享受

    【讨论】:

    • 这是使用脚本,但如果 &lt;s:param&gt; 内的 &lt;s:param&gt; 值将被修复,则也可以工作。
    • 不错,未测试,但信任 +1 :)
    【解决方案3】:

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

    【讨论】:

    • 那行不通。包含文件中的参数必须以其他方式访问。
    • 您究竟是如何将参数传递给包含文件的?如果它像原始帖子中那样,那么它应该不起作用。
    • 在阅读 struts2 文档后修正了我的答案,我想我在快速测试中做错了什么。
    【解决方案4】:

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

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

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

    【讨论】:

    • 你只需要告诉它是一个字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    相关资源
    最近更新 更多