176142998

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            116 Posts :: 0 Stories :: 45 Comments :: 0 Trackbacks

          #

          插件提供了一種名為json的ResultType,一旦為某個Action指定了一個類型為json的Result,則該Result無需映射到任何視圖資源。因為JSON插件會負責將Action里的狀態信息序列化成JSON格式的數據,并將該數據返回給客戶端頁面的JavaScript。

            簡單地說,JSON插件允許我們在JavaScript中異步調用Action,而且Action不再需要使用視圖資源來顯示該Action里的狀態信息,而是由JSON插件負責將Action里的狀態信息返回給調用頁面——通過這種方式,就可以完成Ajax交互。

            Struts2提供了一種可插拔方式來管理插件,安裝Struts2的JSON插件與安裝普通插件并沒有太大的區別,一樣只需要將Struts2插件的JAR文件復制到Web應用的WEB-INF/lib路徑下即可。

            安裝JSON插件按如下步驟進行:

            (1)登陸http://code.google.com/p/jsonplugin/downloads/list站點,下載Struts2的JSON插件的最新版本,當前最新版本是0.7,我們可以下載該版本的JSON插件。

            (2)將下載到的jsonplugin-0.7.jar文件復制到Web應用的WEB-INF路徑下,即可完成JSON插件的安裝。

            實現Actio邏輯

            假設wo,en輸入頁面中包含了三個表單域,這三個表單域對于三個請求參數,因此應該使用Action來封裝這三個請求參數。三個表單域的name分別為field1、field2和field3。

            處理該請求的Action類代碼如下:   public class JSONExample
            {
            //封裝請求參數的三個屬性
            private String field1;
            private transient String field2;
            private String field3;
            //封裝處理結果的屬性
            private int[] ints = {10, 20};
            private Map map = new HashMap();
            private String customName = "custom";
            //三個請求參數對應的setter和getter方法
            public String getField1()
            {
            return field1;
            }
            public void setField1(String field1)
            {
            this.field1 = field1;
            }
            //此處省略了field1和field2兩個字段的setter和getter方法
            ...
            //封裝處理結果的屬性的setter和getter方法
            public int[] getInts()
            {
            return ints;
            }
            public void setInts(int[] ints)
            {
            this.ints = ints;
            }
            public Map getMap()
            {
            return map;
            }
            public void setMap(Map map)
            {
            this.map = map;
            }
            //使用注釋語法來改變該屬性序列化后的屬性名
            @JSON(name="newName")
            public String getCustomName()
            {
            return this.customName;
            }
            public String execute()
            {
            map.put("name", "yeeku");
            return Action.SUCCESS;
            }
            }
            在上面代碼中,使用了JSON注釋,注釋時指定了name域,name域指定Action屬性被序列化成JSON對象的屬性名。除此之外,JSON注釋還支持如下幾個域:


            

          serialize:設置是否序列化該屬性

            deserialize:設置是否反序列化該屬性。

            format:設置用于格式化輸出、解析日期表單域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。

            配置該Action與配置普通Action存在小小的區別,應該為該Action配置類型為json的Result。而這個Result無需配置任何視圖資源。

            配置該Action的struts.xml文件代碼如下:  <?xml version="1.0" encoding="GBK"?>
          <!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>
          <constant name="struts.i18n.encoding" value="UTF-8"/>
          <package name="example" extends="json-default">
          <action name="JSONExample" class="lee.JSONExample">
          <result type="json"/>
          </action>
          </package>
          </struts>  
            在上面配置文件中有兩個值得注意的地方:

            第一個地方是配置struts.i18n.encoding常量時,不再是使用GBK編碼,而是UTF-8編碼,這是因為Ajax的POST請求都是以UTF-8的方式進行編碼的。

            第二個地方是配置包時,自己的包繼承了json-default包,而不再繼承默認的default包,這是因為只有在該包下才有json類型的Result。
          posted @ 2008-08-04 09:33 飛飛 閱讀(210) | 評論 (0)編輯 收藏

               摘要: div標簽用于在頁面上生成一個div元素,但這個div元素內容不是靜態內容,而是從服務器上獲取數據,為了讓該div能夠取得服務器上的數據,必須為div標簽指定一個href屬性,這個href屬性必須是一個action,該action負責生成該div的內容 因為div是一個ajax標簽,因此要為這個標簽增加theme="ajax"屬性 web.xml   <?xml&nbs...  閱讀全文
          posted @ 2008-08-04 09:29 飛飛 閱讀(2095) | 評論 (0)編輯 收藏

          一、iterator.

          這個標簽主要的的作用就是跌代出集合。。

          value屬性表示需要跌代顯示出來的值。

          status屬性,又來保存跌代時的一些狀態值。

          注:1.如果需要引用valueStack中的值,需要使用這樣的形式。

          <s:iterator value="#userList" />  //userList在action部分被保存在Request中,所以使用#加屬性名來引用值。

          2.如果集合的值是通過action的方法,假設我們的action中有一個getListMenu方法,返回一個List集合。

          我們可以使用如下的形式來引用這個集合,并用s:iterator來輸出。

          <s:iterator value="listMenu" />

          3.iterator的value使用定義好的方式,如:

          <s:iterator value="{1,2,3,4}" />         //這樣跌代輸出的值就是1.2.3.4這四個值。

          二、iterator中輸出具體值,如果,在上面我們的list中的對象,有兩個屬性,都是String類型,一個是name,一個是url。

          我們可以這樣來引用。

          1.      <s:property value="name" />       //這樣我們將可以輸出跌代對象的name屬性值。

          2.     如果我們希望使用<s:url />來將跳轉過后的url進行處理,該如何來做?

                   <s:url value="%{url}"/>            //%{}ognl的表達式,這樣的值能夠將url的值進行<s:url/>的處理

                   實際上就是轉為絕對路徑。這樣,我們就可以對付一些因跳轉換產生的路徑問題。

              原因:因為<s:iteratotr />以后,當前的對象應該就在ValueStack頂部了,這樣當然的url實際上就是對象的url          屬性了

          三、使用ognl輸出對應的值。

          <s:textfield name="loginName" value="%{#request.loginNames}"/>

           

          使用此表達式,會生成一個文本框,并且,如果request.attribute中有loginNames屬性,將會做為些文本框的默認值。

          如果只使用#request.loginNames在struts2的標簽內部,是不會顯示任何值的,注意外面加上的%{}附號,才會被正常的使用。

          如果希望如EL語言一樣直接輸出文件,如在一個<a></a>之間的innerHTML文本為#request.loginNames的值,我們只要使用:<s:property value="#request.loginNames" />使可以正常使用!

           

          注:

          1.${}是EL語言的 %{}這樣的形式是ognl表過式語言的,在struts2的標簽內部,使用%{}這樣的形式,在標簽外部可以使用${}EL語言的方式。如果在struts2的標簽內部使用${}這樣的方式,會出現以下的錯誤提示:

          According to TLD or attribute directive in tag file, attribute value does not accept any expressions

          2.很多時候,我們使用struts2的一些標簽,屬性是需要接受集合的,如果集合是保存在request,session,或者是值棧(非根對象的棧頂),可以使用#變量名的方式,如果獲取的值是在Action中通過特定的方法來獲取,就需要使用如 value="userList"這樣的方式,只是去掉了前面的#。

           

          3.可能我對一些值棧,根對象,棧頂的一些ognl知識有些不錯誤,如果發現了問題,請幫助指出,謝謝。

          posted @ 2008-08-04 09:25 飛飛 閱讀(231) | 評論 (0)編輯 收藏

               摘要: Struts.xml 文件 Java代碼 <?xml version="1.0" encoding="UTF-8" ?>    <!DOCTYPE struts PUBLIC        "-/...  閱讀全文
          posted @ 2008-08-04 00:26 飛飛 閱讀(339) | 評論 (0)編輯 收藏

             1. <%@ page contentType="text/html; charset=GBK" language="java"%> 
             2.
          <%@taglib prefix="s" uri="/struts-tags"%> 
             3.
          <html> 
             4.
          <head> 
             5.
          <title>s:if標簽測試</title> 
             6.
          </head> 
             7.
          <body> 
             8.
          <s:set name="age" value="29"/> 
             9.
          <s:if test="${age > 60}"> 
            10.     老年人 
            11.
          </s:if> 
            12.
          <s:elseif test="${age > 35}"> 
            13.     中年人 
            14.
          </s:elseif> 
            15.
          <s:elseif test="${age > 15}" id="wawa"> 
            16.     青年人 
            17.
          </s:elseif> 
            18.
          <s:else> 
            19.     少年 
            20.
          </s:else> 
            21.
          </body> 
            22.
          </html> 


          比如登陸模塊
          <s:textfield label="用戶名" name="user.username"/>
          <s:password label="密碼" name="user.password"/>
          這樣寫的話,他會默認換行,可以不換行嗎?

          只要你將它的這個theme屬性設成simple那么它就不會用Struts2的格式了,每個STRUTS1的標簽都有這樣的一個性!!!!



          問題:No result defined for action cn.bbs.nhpop.web.action.ReplyTopic Action and result input 錯誤

          意思是說沒定義input的跳轉結果.

              @Override
              
          public String execute() throws Exception {
                  topic 
          = topicService.getTopic(topicId);
                  reply.setTopic(topic);
                  replyService.replyTopic(reply);
                  
          return this.SUCCESS;
              }

          原因:我的cn.bbs.nhpop.web.action.ReplyTopic Action execute方法返回SUCCESS,但是實際運行中出現了錯誤(拋了異常),Action并沒有返回SUCCESS而是返回INPUT(Action出現錯誤時默認的返回值),而我的struts.xml配置文件中并沒有定義與INPUT對應的Result

                  <action name="replyTopic"
                      class
          ="cn.bbs.nhpop.web.action.ReplyTopic">
                      
          <result name="success" type="chain">
                          
          <param name="actionName">listTopicsDetails</param>
                      
          </result>
                  
          </action>

           

          解決方法:你可以添加一個與INPUT對應的Result或者解決Action方法實際運行中的異常。

          我的Action到底拋了個什么異常呢?

                  <s:form action="replyTopic">
                      
          <s:hidden name="topicId" value="%{topicId}"></s:hidden>
          <%--            <s:param name="topicId" value="%{topicId}"></s:param>--%>

          </s:form>
          這是我的reply.jsp,開始我使用<s:param></s:param>傳topicId,想當然的認為可以與<s:form></s:form>合用傳參,導致replyTopic Action無法獲取到topicId的值
              @Override
              
          public String execute() throws Exception {
                  topic 
          = topicService.getTopic(topicId);
                  reply.setTopic(topic);
                  replyService.replyTopic(reply);
                  
          return this.SUCCESS;
              }
          topic為null拋異常。(<s:url action=""><s:param></s:param></s:url>是可以這樣傳參的,但與<s:form></s:form>不行)
          后來用<s:hidden></s:hidden>代替解決。另外
          <s:hidden name="topicId" value="topicId"></s:hidden>
          value="%{topicId}"切不可省去%{}否則Action中的topicId的值為字符串為"topicId"而不是我希望的int值1,%{topicId}相當于
          <s:property value="topicId"/>
          你可以使用%{}或嵌套<s:property>標簽。struts2標簽的屬性可以接受一個字符串的值的時候請大家尤其注意,必須使用%{} 或<s:property>才會是你想要的值。比如:
          <s:hidden name="topicId" value="%{topicId}"></s:hidden>


                      
          <s:url id="toReply" action="toReply">
                          
          <s:param name="topicId" value="topicId"></s:param>
                      
          </s:url>

                      
          <tr>
                          
          <td height="18" colspan="2">
                              
          &nbsp;
                              
          <s:a href="%{toReply}">回復 </s:a> &nbsp;
                          
          </td>
                      
          </tr>


          <s:select name="page" list="page" listKey="key" listValue="value" value="page"></s:select>

          @SuppressWarnings("unchecked")
           public List<HashMap> getPage(){
            List<HashMap> numPage = new ArrayList<HashMap>();   
            
            for(int i=0;i<10;i++){
             HashMap m=new HashMap();
             m.put("key", i);
             m.put("value", i+1);
             numPage.add(m);
            } 
            return numPage;
            
           }
          posted @ 2008-08-01 14:23 飛飛 閱讀(2808) | 評論 (2)編輯 收藏

          在Struts2里,如果需要在Action中使用session,可以通過下面兩種方式得到
          1.通過ActionContext class中的方法getSession得到
          2.Action實現org.apache.struts2.interceptor.SessionAware接口的方式來對session進行操作
           
          下面先看一個采用第一種方式,在action中得到session的例子

          package s2.ex.action;

           

          import java.util.Map;

           

          import com.opensymphony.xwork2.ActionContext;

          import com.opensymphony.xwork2.ActionSupport;

           

          public class SessionTestAction extends ActionSupport {

           

              public String execute() {

                 ActionContext actionContext = ActionContext.getContext();

                 Map session = actionContext.getSession();

                 session.put("USER_NAME", "Test User");

                 return SUCCESS;

              }

          }
          在這個例子中,通過ActionContext得到session,并往session里放置一個key為USER_NAME,值為Test User的內容。
           
          下面是一個實現org.apache.struts2.interceptor.SessionAware接口來對session操作的例子

          package s2.ex.action;

           

          import java.util.Map;

           

          import org.apache.struts2.interceptor.SessionAware;

           

          import com.opensymphony.xwork2.ActionSupport;

           

          public class SessionTest1Action extends ActionSupport implements SessionAware {

              private Map session;

              public void setSession(Map session) {

                 this.session = session;

           

              }

              public String execute() {

                 this.session.put("USER_NAME", "Test User 1");

                 return SUCCESS;

              }

           

          }
          在這個例子中實現了接口SessionAware中的setSession方法。
           
          上面兩種方式都可以得到session,能實現的功能都是一樣的。
          這里推薦通過第二種方式來使用session,原因是便于做單體測試,用第二種方式,只需要構造一個Map就可以對action class進行單體測試了。
          在一個項目中可能會有很多action都需要用到session,如果每個action都來實現org.apache.struts2.interceptor.SessionAware這個接口,可能會顯得比較麻煩,所以建議作一個抽象的BaseAction類來實現org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要繼承這個BaseAction就可以了。
           
          下面是一個如何在JSP中使用session的例子。

          <%@ page contentType="text/html; charset=UTF-8" %>

          <%@page pageEncoding="utf-8" %>

          <%@taglib prefix="s" uri="/struts-tags" %>

          <html>

          <head>

              <title>Session Test</title>

          </head>

           

          <body>

          <h1><s:property value="#session.USER_NAME"/></h1>

          <h1>${session.USER_NAME}</h1>

          </body>

          </html>
          一般在項目中往往會往session里放置一個Object,必如說user,user里有個boolean admin和String userName,如果user里存在isAdmin的方法,在jsp中可以通過<s:if test="#session.user.admin">來判斷用戶有沒有管理權限,通過<s:property value="#session.user.userName">或者${session.user.userName}來取得用戶名。
          posted @ 2008-08-01 14:13 飛飛 閱讀(237) | 評論 (0)編輯 收藏

          Struts2中最簡單的驗證數據的方法是使用validate。我們從ActionSupport類的源代碼中可以看到,ActionSupport類實現了一個Validateable接口。這個接口只有一個validate方法。如果Action類實現了這個接口,Struts2在調用execute方法之前首先會調用這個方法,我們可以在validate方法中驗證,如果發生錯誤,可以根據錯誤的level選擇字段級錯誤,還是動作級錯誤。并且可使用addFieldErroraddActionError加入相應的錯誤信息,如果存在ActionField錯誤,Struts2會返回“input”(這個并不用開發人員寫,由Struts2自動返回),如果返回了“input”,Struts2就不會再調用execute方法了。如果不存在錯誤信息,Struts2在最后會調用execute方法。

          這兩個add方法和ActionErrors類中的add方法類似,只是add方法的錯誤信息需要一個ActionMessage對象,比較麻煩。除了加入錯誤信息外,還可以使用addActionMessage方法加入成功提交后的信息。當提交成功后,可以顯示這些信息。

          以上三個add方法都在ValidationAware接口中定義,并且在ActionSupport類中有一個默認的實現。其實,在ActionSupport類中的實現實際上是調用了ValidationAwareSupport中的相應的方法,也就是這三個add方法是在ValidationAwareSupport類中實現的,代碼如下:
          private final ValidationAwareSupport validationAware = new ValidationAwareSupport();

          public void addActionError(String anErrorMessage) 
          {      validationAware.addActionError(anErrorMessage);
          }
          public void addActionMessage(String aMessage) 
          {
              validationAware.addActionMessage(aMessage);
          }
          public void addFieldError(String fieldName, String errorMessage) 
          {
              validationAware.addFieldError(fieldName, errorMessage);
          }

          下面我們來實現一個簡單的驗證程序,來體驗一個validate方法的使用。

          先來在Web根目錄建立一個主頁面(validate.jsp),代碼如下:


          <%@ page language="java"  pageEncoding="GBK"%>
          <%@ taglib prefix="s" uri="/struts-tags"%>

          <html>
           <head>
            <title>輸入操作數</title>

            <style type="text/css">
          .label {
           font-style: italic;
          }

          .errorLabel {
           font-style: italic;
           color: red;
          }

          .errorMessage {
           font-weight: bold;
           color: red;
          }
          </style>

           
          </head>

           <body>
            求代數和
            <br />
            <s:form action="First">
             <s:textfield name="operand1" label=" 操作數1" />
             <s:textfield name="operand2" label=" 操作數2" />
             <s:submit value="代數和" />
            </s:form>
           </body>
          </html>

          在上面的代碼中,使用了Struts2tag<s:actionerror><s:fielderror><s:actionmessage>,分別用來顯示動作錯誤信息,字段錯誤信息,和動作信息。如果信息為空,則不顯示。

          現在我們來實現一個動作類,代碼如下:


          package action;

          import com.opensymphony.xwork2.ActionSupport;

          @SuppressWarnings("serial")
          public class FirstAction extends ActionSupport {
           private int operand1;
           private int operand2;

           public String execute() throws Exception {
            System.out.println(getFirst() + "http://////////");
            if (getFirst() <= 0) // 如果代碼數和是非負整數,跳到positive.jsp頁面
            {
             return INPUT;
            }
            return SUCCESS;
           }

           public int getOperand1() {
            return operand1;
           }

           public void setOperand1(int operand1) {
            System.out.println("operand1:" + operand1);
            this.operand1 = operand1;
           }

           public int getOperand2() {
            return operand2;
           }

           public void setOperand2(int operand2) {
            System.out.println("operand2:" + operand2);
            this.operand2 = operand2;
           }

           public int getFirst() {
            return operand1 + operand2; // 計算兩個整數的代碼數和
           }

          }


          大家從上面的代碼可以看出,Field錯誤需要一個key(一般用來表示是哪一個屬性出的錯誤),而Action錯誤和Action消息只要提供一個信息字符串就可以了。

          最后來配置一下這個Action,代碼如下:

          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE struts PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
          "http://struts.apache.org/dtds/struts-2.0.dtd">
          <struts>

           <package name="struts2" extends="struts-default">
            <action name="First" class="First">
             <result name="input">/index.jsp</result>
             <result name="success">/positive.jsp</result>
           </action>
           </package>
          </struts>


           

          我們還可以使用ValidationAware接口的其他方法(由ValidationAwareSupport類實現)獲得或設置字段錯誤信息、動作錯誤信息以及動作消息。如hasActionErrors方法判斷是否存在動作層的錯誤,getFieldErrors獲得字段錯誤信息(一個Map對象)。下面是ValidationAware接口提供的所有的方法:


          package com.opensymphony.xwork2;

          import java.util.Collection;
          import java.util.Map;

          public interface ValidationAware
          {
              
          void setActionErrors(Collection errorMessages);
              Collection getActionErrors();

              
          void setActionMessages(Collection messages);
              Collection getActionMessages();
              
          void setFieldErrors(Map errorMap);
              Map getFieldErrors();
              
          void addActionError(String anErrorMessage);
              
          void addActionMessage(String aMessage);
              
          void addFieldError(String fieldName, String errorMessage);
              
          boolean hasActionErrors();
              
          boolean hasActionMessages();
              
          boolean hasErrors();
              
          boolean hasFieldErrors();
          }

          關于其他更詳細的驗證規則,請讀者訪問http://struts.apache.org/2.0.11.1/docs/validation.html來查看。

          struts2驗證信息重復出現解決方案

          你的action是不是被spring代管了?


                我一看,是啊,我的action是被spring代管了。

                接著他又寫道:

                你的action class是不是用的bean 的id?

                我一邊看還一邊點頭,是啊,我的真是這樣的,怎么這么了解我!(其實人人都這樣寫)

                最后他說:

                把你action 的class改成全路徑,問題就會得到解決。


                是嗎?我當時想,那就是說不要spring代管了,那我還要向這個action 注屬性的,這樣改了肯定注不進去了。

                正如我所說的,這樣改了驗證的問題是得到解決了,可是屬性注不進去了。那不是正了一樣又歪了一樣,問題并沒有得到根本性的解決。

                正在有點想抓狂中,卻無意發現我的這個bean怎么沒有寫scope="prototype",這個屬性是告訴spring,每來一個action給我產生一個新的實例。就這么簡單,問題得以真正的解決。

          posted @ 2008-08-01 11:48 飛飛 閱讀(545) | 評論 (0)編輯 收藏

          struts.xmlstruts.properties

              其中struts.xml文件主要負責管理應用中的Action映射,以及該Action包含的Result定義等。除此之外,Struts 2框架還包含一個struts.properties文件,該文件定義了Struts 2框架的大量屬性,開發者可以通過改變這些屬性來滿足應用的需求。

               struts.properties文件是一個標準的Properties文件,該文件包含了系列的key-value對象,每個key就是一個Struts 2屬性,該key對應的value就是一個Struts 2屬性值。

                struts.properties文件通常放在Web應用的WEB-INF/classes路徑下。實際上,只要將該文件放在Web應用的CLASSPATH路徑下,Struts 2框架就可以加載該文件。



                其實,struts.properties文件的內容均可在struts.xml中以<constant name="" value=""></constant>加載。

          下面將該文件的配置參數詳細列舉出來,方便大家查看;

          struts.configuration

              該屬性指定加載Struts 2配置文件的配置文件管理器。該屬性的默認值是org.apache.Struts2.config.DefaultConfiguration,這是Struts 2默認的配置文件管理器。如果需要實現自己的配置管理器,開發者則可以實現一個實現Configuration接口的類,該類可以自己加載Struts 2配置文件。


          struts.locale

          指定Web應用的默認Locale。

          struts.i18n.encoding

               指定Web應用的默認編碼集。該屬性對于處理中文請求參數非常有用,對于獲取中文請求參數值,應該將該屬性值設置為GBK或者GB2312。

          提示  當設置該參數為GBK時,相當于調用HttpServletRequest的setCharacterEncoding方法。


          struts.objectFactory

              指定Struts 2默認的ObjectFactory Bean,該屬性默認值是spring。

          struts.objectFactory.spring.autoWrite

               指定Spring框架的自動裝配模式,該屬性的默認值是name,即默認根據Bean的name屬性自動裝配。

          struts.objectFactory.spring.useClassCache

                該屬性指定整合Spring框架時,是否緩存Bean實例,該屬性只允許使用true和false兩個屬性值,它的默認值是true。通常不建議修改該屬性值。



          struts.objectTypeDeterminer
              該屬性指定Struts 2的類型檢測機制,通常支持tiger和notiger兩個屬性值。


           struts.multipart.parser:該屬性指定處理multipart/form-data的MIME類型(文件上傳)請求的框架,該屬性支持cos、pell和jakarta等屬性值,即分別對應使用cos的文件上傳框架、pell上傳及common-fileupload文件上傳框架。該屬性的默認值為jakarta。

          注意  如果需要使用cos或者pell的文件上傳方式,則應該將對應的JAR文件復制到Web應用中。例如,使用cos上傳方式,則需要自己下載cos框架的JAR文件,并將該文件放在WEB-INF/lib路徑下。

          struts.multipart.saveDir
              該屬性指定上傳文件的臨時保存路徑,該屬性的默認值是javax.servlet.context.tempdir。

           struts.multipart.maxSize
          該屬性指定Struts 2文件上傳中整個請求內容允許的最大字節數。

          struts.custom.properties
              該屬性指定Struts 2應用加載用戶自定義的屬性文件,該自定義屬性文件指定的屬性不會覆蓋struts.properties文件中指定的屬性。如果需要加載多個自定義屬性文件,多個自定義屬性文件的文件名以英文逗號(,)隔開。

          struts.mapper.class
              指定將HTTP請求映射到指定Action的映射器,Struts 2提供了默認的映射器:org.apache.struts2.dispatcher.mapper.DefaultActionMapper。默認映射器根據請求的前綴與Action的name屬性完成映射。

          struts.action.extension
               該屬性指定需要Struts 2處理的請求后綴,該屬性的默認值是action,即所有匹配*.action的請求都由Struts 2處理。如果用戶需要指定多個請求后綴,則多個后綴之間以英文逗號(,)隔開。

          struts.serve.static
              該屬性設置是否通過JAR文件提供靜態內容服務,該屬性只支持true和false屬性值,該屬性的默認屬性值是true。

          struts.serve.static.browserCache
              該屬性設置瀏覽器是否緩存靜態內容。當應用處于開發階段時,我們希望每次請求都獲得服務器的最新響應,則可設置該屬性為false。

           struts.enable.DynamicMethodInvocation
             該屬性設置Struts 2是否支持動態方法調用,該屬性的默認值是true。如果需要關閉動態方法調用,則可設置該屬性為false。

          struts.enable.SlashesInActionNames
             該屬性設置Struts 2是否允許在Action名中使用斜線,該屬性的默認值是false。如果開發者希望允許在Action名中使用斜線,則可設置該屬性為true。

           struts.tag.altSyntax
             該屬性指定是否允許在Struts 2標簽中使用表達式語法,因為通常都需要在標簽中使用表達式語法,故此屬性應該設置為true,該屬性的默認值是true。

           struts.devMode
          該屬性設置Struts 2應用是否使用開發模式。如果設置該屬性為true,則可以在應用出錯時顯示更多、更友好的出錯提示。該屬性只接受true和flase兩個值,該屬性的默認值是false。通常,應用在開發階段,將該屬性設置為true,當進入產品發布階段后,則該屬性設置為false。

          struts.i18n.reload
          該屬性設置是否每次HTTP請求到達時,系統都重新加載資源文件。該屬性默認值是false。在開發階段將該屬性設置為true會更有利于開發,但在產品發布階段應將該屬性設置為false。

          提示  開發階段將該屬性設置了true,將可以在每次請求時都重新加載國際化資源文件,從而可以讓開發者看到實時開發效果;產品發布階段應該將該屬性設置為false,是為了提供響應性能,每次請求都需要重新加載資源文件會大大降低應用的性能。

          struts.ui.theme
          該屬性指定視圖標簽默認的視圖主題,該屬性的默認值是xhtml。

          struts.ui.templateDir
          該屬性指定視圖主題所需要模板文件的位置,該屬性的默認值是template,即默認加載template路徑下的模板文件。

          struts.ui.templateSuffix
          該屬性指定模板文件的后綴,該屬性的默認屬性值是ftl。該屬性還允許使用ftl、vm或jsp,分別對應FreeMarker、Velocity和JSP模板。

          struts.configuration.xml.reload
          該屬性設置當struts.xml文件改變后,系統是否自動重新加載該文件。該屬性的默認值是false。

          struts.velocity.configfile
          該屬性指定Velocity框架所需的velocity.properties文件的位置。該屬性的默認值為velocity.properties。

           struts.velocity.contexts
          該屬性指定Velocity框架的Context位置,如果該框架有多個Context,則多個Context之間以英文逗號(,)隔開。

          struts.velocity.toolboxlocation
          該屬性指定Velocity框架的toolbox的位置。

          struts.url.http.port
          該屬性指定Web應用所在的監聽端口。該屬性通常沒有太大的用戶,只是當Struts 2需要生成URL時(例如Url標簽),該屬性才提供Web應用的默認端口。

          struts.url.https.port
          該屬性類似于struts.url.http.port屬性的作用,區別是該屬性指定的是Web應用的加密服務端口。

          struts.url.includeParams
          該屬性指定Struts 2生成URL時是否包含請求參數。該屬性接受none、get和all三個屬性值,分別對應于不包含、僅包含GET類型請求參數和包含全部請求參數。


            struts.custom.i18n.resources
          該屬性指定Struts 2應用所需要的國際化資源文件,如果有多份國際化資源文件,則多個資源文件的文件名以英文逗號(,)隔開。


          struts.dispatcher.parametersWorkaround
              對于某些Java EE服務器,不支持HttpServlet Request調用getParameterMap()方法,此時可以設置該屬性值為true來解決該問題。該屬性的默認值是false。對于WebLogic、Orion和OC4J服務器,通常應該設置該屬性為true。

           struts.freemarker.manager.classname
              該屬性指定Struts 2使用的FreeMarker管理器。該屬性的默認值是org.apache.struts2.views.freemarker.FreemarkerManager,這是Struts 2內建的FreeMarker管理器。

          struts.freemarker.wrapper.altMap
          該屬性只支持true和false兩個屬性值,默認值是true。通常無需修改該屬性值。

           struts.xslt.nocache
              該屬性指定XSLT Result是否使用樣式表緩存。當應用處于開發階段時,該屬性通常被設置為true;當應用處于產品使用階段時,該屬性通常被設置為false。

          struts.configuration.files
              該屬性指定Struts 2框架默認加載的配置文件,如果需要指定默認加載多個配置文件,則多個配置文件的文件名之間以英文逗號(,)隔開。該屬性的默認值為struts-default.xml,struts-plugin.xml,struts.xml,看到該屬性值,讀者應該明白為什么Struts 2框架默認加載struts.xml文件了。
          posted @ 2008-08-01 11:23 飛飛 閱讀(173) | 評論 (0)編輯 收藏

          所謂間接實現零配置,是指只要做些初始化的配置之后,在以后的開發中基本上不用在對每個Action做配置 struts.xml這樣配置
              <action name="*/*" method="{2}" class="workbench.web.actions.{1}Action">
                 <result name="custom">/view/{1}/${target}.jsp</result>
              </action>struts.properties的配置:
             
          XML codestruts.objectFactory = spring
              struts.objectFactory.spring.autoWire = name
              struts.devMode = true
              struts.enable.DynamicMethodInvocation = false
              struts.action.extension =
              struts.enable.SlashesInActionNames = true然后寫一個BaseAction:
              public abstract class BaseAction {
                  protected final String CUSTOM = "custom";
                  private String target;
                  protected final Log logger = LogFactory.getLog(getClass());
                  public String getTarget() {
                      return target;
                  }
                  public void setTarget(String target) {
                      this.target = target;
                  }

                  protected String render(String _target){
                      setTarget(_target);
                      return CUSTOM;
                  }
              }
              這樣其余的Action都可以直接繼承BaseAction,不用再做任何配置 通過return render(target)轉發到指定的jsp頁面,從而間接實現零配置
              public class UserAction extends BaseAction{
                  private User user;
                  private UserService userService;
                  public void setUserService(UserService userService) {
                      this.userService = userService;
                  }

                  public User getUser() {
                      return user;
                  }
                  public void setUser(User user) {
                      this.user = user;
                  }
                  public String test(){
                      user = userService.get(1l);
                      return render("test");
                  }
              }


          但是在我的SSH框架中,沒能時間間接零配置,,,有那個高手幫我解決下????

          posted @ 2008-08-01 10:30 飛飛 閱讀(316) | 評論 (0)編輯 收藏


           @SuppressWarnings("unchecked")
           public List getAll(final int pageNow, final int pageSize) {
            final String hql = " from Mount ";
            return getHibernateTemplate().executeFind(new HibernateCallback() {

             public Object doInHibernate(Session s) throws HibernateException,
               SQLException {

              Query queryAll = s.createQuery(hql);
              queryAll.setFirstResult(pageSize * pageNow);
              queryAll.setMaxResults(pageSize);
              return queryAll.list();
             }
            });
           }

          posted @ 2008-07-31 23:00 飛飛 閱讀(227) | 評論 (0)編輯 收藏

          僅列出標題
          共12頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
          主站蜘蛛池模板: 渝北区| 洪泽县| 清流县| 建宁县| 大安市| 青阳县| 皋兰县| 莱阳市| 万荣县| 泗阳县| 秭归县| 龙泉市| 崇左市| 云南省| 长汀县| 康保县| 肥乡县| 城市| 江源县| 开远市| 罗田县| 沅江市| 济阳县| 乌兰察布市| 南漳县| 区。| 江孜县| 新丰县| 介休市| 新密市| 长宁区| 蓝山县| 广河县| 台中县| 铅山县| 汶上县| 英山县| 讷河市| 尉氏县| 娄烦县| 读书|