java - 如何在 JSP 中获取 Action 名称,即使它是空的?

标签 java jsp struts2 ognl struts-action

我是java新手。我尝试四处搜索,但没有找到与我的问题类似的内容。

我在菜单中有列表项(<ul> -s 和 <li> -s)我想添加 active<li> 中上课根据操作的名称标记使特定菜单项处于 Activity 状态。

为此我使用了这段代码

${request.context['struts.actionMapping'].name}

这段代码在所有页面上工作正常,除了页面上的操作名称是 ""即空字符串。空字符串检查或 null 检查在操作名称仅为 "" 的情况下不起作用

<s:set var="action">${request.context['struts.actionMapping'].name}</s:set>

<ul class="nav navbar-nav navbar-right">
    <li class="<s:if test="%{#action == ''}">active</s:if>">
        <s:a href="/crudoperation">Dashboard</s:a>
    </li>
    <li class="<s:if test="%{#action == 'add'}">active</s:if>">
        <s:url var="addUrl" action="add"/>
        <s:a href="%{addUrl}">Add Student Profile</s:a>
    </li>
    <li class="<s:if test="%{#action == 'edit'}">active</s:if>">
        <s:url var="editUrl" action="edit"/>
        <s:a href="%{editUrl}">Edit Profile</s:a>
    </li>
    <li class="<s:if test="%{#action == 'view'}">active</s:if>">
        <s:url var="viewUrl" action="view"/>
        <s:a href="%{viewUrl}">View Profile</s:a>
    </li>
</ul>

这是我的struts.xml

<struts>
    <constant name="struts.ui.theme" value="simple" />
    <package name="default" extends="struts-default" namespace="/">

        <result-types>
            <result-type name="tiles"
                class="org.apache.struts2.views.tiles.TilesResult" />
        </result-types>

        <action name="" class="com.javaguy.struts2.IndexAction">
            <result name="master" type="tiles">master</result>
        </action>

        <action name="add" class="com.javaguy.struts2.AddAction">
            <result name="add" type="tiles">add</result>
        </action>

        <action name="edit" class="com.javaguy.struts2.EditAction">
            <result name="edit" type="tiles">edit</result>
        </action>

        <action name="view" class="com.javaguy.struts2.ViewAction">
            <result name="view" type="tiles">view</result>
        </action>
    </package>
</struts>

最佳答案

如果操作名称为空,则为 ${request.context['struts.actionMapping'].name}将在 <s:set> 中产生空虚标签体等于<s:set var="some"></s:set>这会将值堆栈中的顶部对象分配给 some多变的。通常值堆栈中的顶部对象是操作类实例。所以你得到类似 com.javaguy.struts2.IndexAction@4349f7db 的东西在您的变量中而不是空字符串中。

要获得空的 Action 名称,只需在 <s:set> 中使用 OGNL标签。

<s:set var="some" value="#request.context['struts.actionMapping'].name" />

也像 Andrea 已经提到的那样,避免在变量中使用关键字(例如 action)。

关于java - 如何在 JSP 中获取 Action 名称,即使它是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34173354/

相关文章:

java - 如何执行 Bash 命令并收集 Java 的输出?

java - 为什么默认 boolean 返回值会影响我的测试结果

java - 无法访问 Google App Engine 上的 Html 文件

tomcat - Struts2.5.2 : The requested resource is not available

java - 负整数的迭代

java - 如何将新变量(来自之前的 Activity )添加到列表中以显示在 android studio 中的 ListView 上?

spring - 将 URL "names"映射到 JSP 中的 Controller

java - 如何在JSP页面中显示数据库表

java - 在java项目中动态存储图像

java - 在Prepare()方法中找不到高级通配符映射参数