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

时间:2015-12-09 07:47:04

标签: java jsp struts2 ognl struts-action

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

我在菜单中有列表项( <script> function LoginDiv() { var joinAs = document.getElementById('joinAs'); while(joinAs.firstChild) { joinAs.removeChild(joinAs.firstChild); } var innerText = "<div class='form row'>"; innerText += <?php $form=$this->beginWidget('CActiveForm', array('id'=>'login-form','enableClientValidation'=>true,'clientOptions'=>array('validateOnSubmit'=>true,),)); ?> innerText += " <div id='LoginDiv' class='answer_list' ><div class='col-lg-12' style='background-color:#F5F5F5;'><div class='row' style='margin:2% 0% 2% 0%'><div align='center' class='col-lg-6'><img src='images/close.png' onclick='hideDiv()' style='width:6%;cursor: pointer'></div><div align='center' class='col-lg-6'><p style='font-size:22px'>LOGIN</p></div></div><div style='clear:both'></div><div align='center' style='width:30%; margin:auto'><form action='' method='POST'><div class='form-group has-feedback'><label for='inputName' class='col-sm-2 col-xs-2 control-label' style='font-weight: 100;'>USERNAME</label>"; innerText += <?php echo $form->textField($model,'username'); ?> + "</div>" + <?php echo $form->error($model,'username'); ?> innerText += "<div class='form-group has-feedback'><label for='inputName' class='col-sm-2 col-xs-2 control-label' style='font-weight: 100;'>PASSWORD</label>" + <?php echo $form->passwordField($model,'password'); ?> +"</div>" + <?php echo $form->error($model,'password'); ?> + "<div class='row'><div class='col-xs-4'><button type='submit' class='btn btn-primary btn-block btn-flat' onclick='PostLogin()'>Sign In</button></div></div></form></div></div></div>" + <?php $this->endWidget(); ?> + "</div>"; joinAs.innerHTML= innerText; } </script> <script src='js/validations.js' ></script> </html> - s和<ul> - s)我想在<li>标记中添加active类,具体取决于操作的名称使特定菜单项处于活动状态。

为此,我使用了这段代码

<li>

这段代码在所有页面上都正常工作,除了页面上的动作名称是${request.context['struts.actionMapping'].name} ,即空字符串。在操作名称仅为""

的情况下,空字符串检查或空检查无效
""

这是我的struts.xml

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

1 个答案:

答案 0 :(得分:2)

如果操作名称为空,${request.context['struts.actionMapping'].name}将在<s:set>标记正文中产生空白,该正文等于<s:set var="some"></s:set>,并且会将值堆栈中的顶级对象指定给{{1}变量。通常,值栈中的顶级对象是动作类实例。所以你在变量中得到some而不是空字符串。

要获取空操作名称,只需在com.javaguy.struts2.IndexAction@4349f7db标记中使用OGNL。

<s:set>

同样Andrea已经提到避免在变量中使用关键字(例如<s:set var="some" value="#request.context['struts.actionMapping'].name" /> )。