Struts2以不同方式传递数据

问题描述 投票:0回答:1

已获得使用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将运行action类的getVersion()方法。但是,没有名为version的字段,也没有方法getVersion()。 JSP中也没有<s:set name="version">变量标签。该代码的重点可能是什么? %{}真的有必要吗?

[这可能是需要删除的旧代码,但是我不确定前两个crudmodeitem.id与后面的%{version}之间有什么区别。

java jsp struts2 ognl valuestack
1个回答
1
投票

test标签的s:if属性中,您无需放置%{}。此缩写用于标记OGNL表达的范围,并在评估前将其删除。在评估时,它正在version中搜索变量valueStack。该操作对象位于topvalueStack上,因此,如果找到名称为version的属性,它将执行getVersion()以返回结果。如果在操作时未找到version,它将继续搜索整个valueStack,直到找到名称为version的属性。在documentation中描述了更多或相似的内容。

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

© www.soinside.com 2019 - 2024. All rights reserved.