【发布时间】:2011-06-10 11:21:40
【问题描述】:
"action" 元素中的 "scope" 属性有多少可用值
struts-config.xml“请求”和“会话”以外的文件?
<action name="loginform" path="/bkplogin" scope="?" type="org.springframework.web.struts.DelegatingActionProxy">
【问题讨论】:
"action" 元素中的 "scope" 属性有多少可用值
struts-config.xml“请求”和“会话”以外的文件?
<action name="loginform" path="/bkplogin" scope="?" type="org.springframework.web.struts.DelegatingActionProxy">
【问题讨论】:
范围属性只有两个可能的值:request 和 session,如 struts-config 的 DTD 中所述:
<!--
The name of a JSP bean scope within which such a form bean may be accessed.
-->
<!ENTITY % RequestScope "(request|session)">
...
...
<!ATTLIST action scope %RequestScope; #IMPLIED>
在此处查看 DTD:
http://struts.apache.org/dtds/struts-config_1_3.dtd
或此处提供更易于阅读的 DTD 文档:
http://struts.apache.org/1.x/struts-core/dtddoc/struts-config_1_3.dtd#action
“应用程序”和“页面”呢?
那么,跨 JSP 页面的对象的范围可以是:
现在,struts-config 中的范围是指在哪里创建/查找 ActionForm 对象。 ActionForm 表示客户端 HTML 表单的服务器对象表示。
拥有具有应用范围的表单没有任何意义,因为它将是每个人的一种表单,我什至无法想到它会有什么用处。所以该领域没有应用价值。
现在假设您有页面范围。这将如何运作? Struts 做了一个RequestDispatcher.forward/redirect 去JSP 文件,它如何将ActionForm 保存在仍然没有页面范围的页面的页面范围中,因为它还没有控制权?!就像向方法发送值一样,但不是发送方法参数,而是尝试从方法外部直接在方法的代码中创建局部变量。
所以只有两个值是有意义的:request 和 session。如果你想要一些额外的东西,你必须自己管理它。
Struts 是一个通用框架,它不涵盖所有可以想象或无法想象的情况,它涵盖了大多数正常用例场景,其中只需要请求和会话。
【讨论】: