posts - 13, comments - 7, trackbacks - 0, articles - 0
          action mapping中的attribute 屬性到底是干什么用的, 很早以前一直不太了解,今天突然又想到了這個問題,感覺不能再扔一邊不管了, 一定要解決它.


          這是在網上查到的關于attribute的解釋.
          1)應用前提,attribute只有在設置了name后才有意義。
          2)attribute可以實現對象的重用,即如果設置了attribute屬性,在創建actionform是,會先去查找相應的scope中是否有此對象,如果有,則重用,否則創建新的對象。
          3)當你將創建的acitonForm保存到相應的scope中時,你想用一個更有意義的名字來訪問它時,它就有意義了。

          可是,看到"一個更有意義的名字的時候", 我好像有點理解了
          <action
          attribute="newLoginForm"
          name="loginForm"
          type="loginAction"
          scope="request"
          path="/login">


          在struts實例化actionform的時候,struts是根據attribute的值來查找并創建actionform,有兩種情況:如果已經存在,那么從內存中取回;如果第一次實例化,那么創建,并放入內存。

          org.apache.struts.util.RequestUtils中的源代碼

          ???public static Actionform createActionform(
          ? ? ? ?HttpServletRequest request,
          ? ? ? ?ActionMapping mapping,
          ? ? ? ?ModuleConfig moduleConfig,
          ? ? ? ?ActionServlet servlet) {
          ?????? ............
          ??????............

          ???????String attribute = mapping.getAttribute();
          ??????......
          ???????Actionform instance = null;
          ? ? ? ?HttpSession session = null;

          ???????if ("request".equals(mapping.getScope())) {
          ? ? ? ? ? ?instance = (Actionform) request.getAttribute(attribute);
          ? ? ? ?} else {
          ? ? ? ? ? ?session = request.getSession();
          ? ? ? ? ? ?instance = (Actionform) session.getAttribute(attribute);
          ? ? ? ?}
          ??????................
          ????????................
          ???????
          ???????}
          ???????
          如果沒有配置attribute屬性的話, struts才會從name屬性里讀出要創建的formbean 的名字,并創建一下實例,看下邊的源代碼就知道了, 呵呵.


          org.apache.struts.config.ActionConfig

          ???protected String attribute = null;

          ? ?public String getAttribute() {
          ?//就是這里了.
          ???????if (this.attribute == null) {
          ? ? ? ? ? ?return (this.name);
          ? ? ? ?} else {
          ? ? ? ? ? ?return (this.attribute);
          ? ? ? ?}
          ? ?}

          ? ?public void setAttribute(String attribute) {
          ? ? ? ?if (configured) {
          ? ? ? ? ? ?throw new IllegalStateException("Configuration is frozen");
          ? ? ? ?}
          ? ? ? ?this.attribute = attribute;
          ? ?}

          Feedback

          # re: 關于struts-config里action元素里的attribute屬性用途的理解  回復  更多評論   

          2008-08-07 16:58 by chenhong
          好厲害!

          # re: 關于struts-config里action元素里的attribute屬性用途的理解  回復  更多評論   

          2008-10-20 22:30 by java Primer
          很好,比起亂七八糟的書籍資料,源代碼的學習才是王道
          主站蜘蛛池模板: 凤阳县| 措勤县| 泸州市| 恭城| 黔江区| 红桥区| 赣榆县| 宿州市| 长泰县| 德庆县| 临城县| 怀来县| 建瓯市| 舞钢市| 闽清县| 青阳县| 闸北区| 伊宁市| 梓潼县| 项城市| 东阳市| 英吉沙县| 尼勒克县| 昂仁县| 阜宁县| 隆安县| 达拉特旗| 鄯善县| 杭锦旗| 瓮安县| 图们市| 若尔盖县| 朝阳县| 衡阳市| 兰坪| 武乡县| 翁牛特旗| 南溪县| 那坡县| 赤水市| 龙州县|