I am new to java. I tried to search around but did not find anything similar to my question.
I have list items in menu (<ul>-s and <li>-s) I want to add the active class in <li> tag depending on the action's name to make the specific menu item active.
For this I have used this piece of code
${request.context['struts.actionMapping'].name}
This piece of code is working fine on all pages except on page were action name is "" i.e empty string. The empty string check or null check is not working where action name is just ""
<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>
Here is my 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>
In case of empty action name the
${request.context['struts.actionMapping'].name}will produce emptiness in<s:set>tag body which is equal to<s:set var="some"></s:set>and that will assign top object from the value stack tosomevariable. Usually top object in the value stack is action class instance. So you get something likecom.javaguy.struts2.IndexAction@4349f7dbin your variable instead of empty string.To get an empty action name just use OGNL in
<s:set>tag.Also like Andrea already mentioned avoid using keywords (such as
action) in your variables.