2015-12-09 4 views
3

Je suis nouveau sur java. J'ai essayé de chercher autour mais je n'ai rien trouvé de semblable à ma question.Comment obtenir le nom de l'action dans JSP même s'il est vide?

J'ai des éléments de liste dans le menu (<ul> -s et <li> -s) Je veux ajouter la classe active dans <li> étiquette en fonction du nom de l'action pour rendre l'élément de menu spécifique actif.

Pour cela, j'ai utilisé ce morceau de code

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

Ce morceau de code fonctionne bien sur toutes les pages, sauf à la page étaient le nom d'action est "" i.e. chaîne vide. La vérification de la chaîne vide ou chèque nul ne fonctionne pas lorsque le nom d'action est juste ""

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

Voici mon 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> 
+0

Action vide? Pourquoi? Utilisez ''. –

+0

Peut-être qu'il veut attraper seulement l'action vide et pas toutes les URL non-correspondantes. Il y a aussi l'astuce '" * "', et BTW le mieux serait d'utiliser un nom non vide, mais je suppose que tout le point est un peu large –

+0

Comment on peut appeler une action vide du tout? Quelque chose comme '/ .action'. –

Répondre

2

En cas de nom d'action vide le ${request.context['struts.actionMapping'].name} va produire le vide dans <s:set> tag body qui est égal à <s:set var="some"></s:set> et qui affectera l'objet supérieur de la pile de valeur à la variable some. Généralement, l'objet supérieur de la pile de valeurs est l'instance de classe d'action. Donc, vous obtenez quelque chose comme [email protected] dans votre variable au lieu de la chaîne vide.

Pour obtenir un nom d'action vide, utilisez simplement OGNL dans la balise <s:set>.

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

En outre, comme Andrea déjà mentionné éviter d'utiliser des mots-clés (par exemple action) dans vos variables.

+1

Un * petit * effet secondaire du mélange de EL avec Struts tags: D –

+1

@YasirWali: Avez-vous d'autres questions concernant ce problème? Si non, n'oubliez pas d'accepter/upvote les réponses qui vous ont aidé. –