【问题标题】:how many values available for scope attribute in action element of struts-config.xml filestruts-config.xml 文件的 action 元素中的 scope 属性有多少可用值
【发布时间】:2011-06-10 11:21:40
【问题描述】:

"action" 元素中的 "scope" 属性有多少可用值 struts-config.xml“请求”和“会话”以外的文件?

<action name="loginform" path="/bkplogin" scope="?" type="org.springframework.web.struts.DelegatingActionProxy">

【问题讨论】:

    标签: java jsp scope struts


    【解决方案1】:

    范围属性只有两个可能的值requestsession,如 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 页面的对象的范围可以是:

    • 页面 - 一个对象只能从创建它的同一 JSP 页面中访问;
    • request - 使用请求范围创建的对象可以从任何服务于该请求的页面访问;
    • 会话 - 可以从属于同一会话的页面访问对象(跨越同一客户端的多个请求,在会话中维护状态,每个客户端都有自己的会话);
    • 应用程序 - 可以从应用程序中的任何页面访问此范围内的对象(所有用户在应用程序范围内共享相同的对象,一个对象供所有用户使用)。

    现在,struts-config 中的范围是指在哪里创建/查找 ActionForm 对象。 ActionForm 表示客户端 HTML 表单的服务器对象表示。

    拥有具有应用范围的表单没有任何意义,因为它将是每个人的一种表单,我什至无法想到它会有什么用处。所以该领域没有应用价值。

    现在假设您有页面范围。这将如何运作? Struts 做了一个RequestDispatcher.forward/redirect 去JSP 文件,它如何将ActionForm 保存在仍然没有页面范围的页面的页面范围中,因为它还没有控制权?!就像向方法发送值一样,但不是发送方法参数,而是尝试从方法外部直接在方法的代码中创建局部变量。

    所以只有两个值是有意义的:requestsession。如果你想要一些额外的东西,你必须自己管理它。

    Struts 是一个通用框架,它不涵盖所有可以想象或无法想象的情况,它涵盖了大多数正常用例场景,其中只需要请求和会话。

    【讨论】:

    • “应用程序”和“页面”呢?
    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2021-11-22
    • 1970-01-01
    相关资源
    最近更新 更多