首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Struts 2标记时,新变量究竟位于何处?

使用Struts 2标记时,新变量究竟位于何处?
EN

Stack Overflow用户
提问于 2015-03-06 12:58:04
回答 1查看 852关注 0票数 2

我正在学习如何使用Struts 2标记,并且我对使用这些标记时存储的新变量的位置有一些疑问。例如,当我想在action作用域中创建一个新变量时,如下所示:

代码语言:javascript
运行
复制
<s:set var="newVar" value="'This is a new string'" />

然后,我想得到这个新变量的值,我可以使用以下两种方法:

代码语言:javascript
运行
复制
<s:property value="#newVar"/>

而且还

代码语言:javascript
运行
复制
<s:property value="newVar"/>

这让我很困惑,因为我不知道这个新变量存储在哪里。第一个property标记使我认为它存储在操作上下文映射中,但在ValueStack之外,而第二个property标记使我认为它存储为动作对象中的一个新属性,该属性位于ValueStack的顶部(在访问它的一个属性时不需要指定它的名称).我甚至认为,也许标签的属性var中给出的变量名允许您直接访问变量.但是,我尝试设置另一个变量,这次是在会话范围中,如下所示:

代码语言:javascript
运行
复制
<s:set var="sessionVar" scope="session" value="'Another string'">

但我唯一能获得它的价值的方法是:

代码语言:javascript
运行
复制
<s:property value="#session.sessionVar"/>

但不是通过:

代码语言:javascript
运行
复制
<s:property value="sessionVar">

因此,我放弃了这样一种想法,即变量的名称允许您立即访问变量。

另一个疑问是,当我使用Struts 2的action标记时。例如,我有一个动作类,它包含一个名为usersList的属性(它是List)。然后,我想在JSP页面中使用以下方法调用该操作:

代码语言:javascript
运行
复制
<s:action name="nameAction" namespace="/" var="actionVar" />

它应该将动作对象放置在ValueStack的顶部。但是,当我想在action对象中的userList属性上迭代时,我还需要指定变量的名称,该变量表示前面有#的操作,如下所示:

代码语言:javascript
运行
复制
<s:iterator value="#actionVar.userList">
    ...
</s:iterator>

所以,我不知道具体的动作对象放在哪里,或者我的错误是什么?

谢谢你的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-06 14:25:41

当您像以前一样关闭<action>标记时:

代码语言:javascript
运行
复制
<s:action name="nameAction" namespace="/" var="actionVar" />

操作不再存储在堆栈上,而是存储在值堆栈"context“中(不是在堆栈本身上,而是在堆栈的上下文中命名)。如果您想要访问该操作的属性而不必存储它,那么您可以像其他任何东西一样嵌套它,把它看作是<s:push>

代码语言:javascript
运行
复制
<s:action name="nameAction" namespace="/">
  <s:property value="userList"/>
</s:action>

国际海事组织的<s:action>标签导致了意大利面代码,这是很难解释的。

对于某些变量(但不是所有变量)来说,当#成为可选变量时,关于什么时候需要它的混淆就变得更加复杂了。我忘记了哪个版本,在2.1或2.2 IIRC的某个地方。它没有存储在操作中;您不能从视图中更改操作的结构。

<s:property>不自动搜索servlet上下文作用域。但是,您可以使用简单的旧JSP来访问这些东西,例如${sessionVar}。由于使用了S2请求包装器,您还可以通过JSP访问操作属性。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28899279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档