0

我得到了使用 Struts2 框架的 JSP 页面的以下代码

<s:form id="crud" action="crudmerge" namespace="templates">
    <s:hidden name="crudMode" />
    <s:hidden name="item.id" />    
    ...    
    <s:if test="crudMode == 1">             
            ...             
    </s:if>
    <s:else>
        <s:if test="%{version != null}">                
            ...             
        </s:if>
        <s:else>                
            ...             
        </s:else>
    </s:else>
</s:form>

在导致此 JSP 页面的操作类中,有以下方法(以及其他方法):getCrudMode()getItem()和 item 有一个名为 的方法getId()

我了解 struts2 将如何使用这些方法来填写<s:hidden>标签。但是,我遇到了以下行的问题:

 <s:if test="%{version != null}">

首先,我认为这与其他两个工作相同,Struts2 将运行getVersion()动作类的方法。但是,没有调用字段,也version没有方法getVersion()。JSP中也没有<s:set name="version">变量标记。这段代码的意义何在?%{}真的有必要吗?

这可能是需要删除的遗留代码,但我不确定前两个crudmodeitem.id和后者之间有什么区别%{version}

4

1 回答 1

1

在标签的test属性中,s:if您不需要放置%{}. 此缩写用于标记 OGNL 表达式的范围,并在评估之前将其删除。在评估它versionvalueStack. action 对象在 上topvalueStack因此如果它找到一个具有名称的属性,version它将执行getVersion()以返回结果。如果在操作中没有找到versionat ,它将继续搜索整个valueStack,直到找到具有 name 的属性version文档中描述了更多或类似的内容。

XWork 有一个特殊的 OGNL PropertyAccessor,它将自动查看堆栈中的所有条目(从上到下),直到找到具有您要查找的属性的对象。

于 2013-11-28T11:22:18.457 回答