3

我是java新手。我试图四处搜索,但没有找到与我的问题类似的任何东西。

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

为此,我使用了这段代码

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

这段代码在所有页面上都可以正常工作,除了页面上的操作名称是""空字符串。空字符串检查或空检查在操作名称只是的地方不起作用""

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

1 回答 1

2

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

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

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

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

于 2015-12-09T19:17:19.477 回答