本站不再更新,歡迎光臨 java開發技術網
          隨筆-230  評論-230  文章-8  trackbacks-0
          Action中獲取HttpServletResponse ,HttpServletRequest,HttpSession等Servlet相關變量有兩種方式;
          1、非Ioc方式
                 

          要獲得上述對象,關鍵Struts 2.0中com.opensymphony.xwork2.ActionContext類。我們可以通過它的靜態方法getContext()獲取當前Action的上下文對象。 另外,org.apache.struts2.ServletActionContext作為輔助類(Helper Class),可以幫助您快捷地獲得這幾個對象。

          HttpServletRequest request = ServletActionContext.getRequest();
          HttpServletResponse response = ServletActionContext.getResponse();
          HttpSession session = request.getSession();


          2、Ioc 方式
                 只要Action類實現SessionAware, ServletRequestAware, ServletResponseAware這幾個接口,相應的變量會自動注入

          調用action的方法
          我們知道,當客戶端請求一個action時,會生成一個Action 對應的變量,并執行execute方法,但這是需要跟據配置來確定的
              < action name ="HelloWorld" class ="tutorial.HelloWorld" > 
                  
          < result > /HelloWorld.jsp </ result > 
              
          </ action > 
          要想改變默認執行的方法,需要在action節點加上要調用的方法名,如:
          <action name="AliasHelloWorld" class="tutorial.HelloWorld" method="aliasAction">
             
          <result>/HelloWorld.jsp</result>
          </action>

          如果要實現類似于Structs1.x那樣的DispatchAction方式的調用,配置例子如下:
                  <action name="login!*" method="{1}" class="one.LoginAction">
                      
          <result name="success" type="dispatcher">
                          
          <param name="location">/main.jsp</param>
                      
          </result>
                      
          <result name="input">/login.jsp</result>
                      
          <result name="loginfail" type="dispatcher">
                          
          <param name="location">/login.jsp</param>
                      
          </result>
                  
          </action>
          如上配置,如果只調用login.action,會執行默認方法execute()。

          Structs 2文件上傳例子
          package one;

          import java.io.File;
          import java.text.*;
          import java.util.*;

          import javax.servlet.ServletContext;

          import org.apache.commons.io.FileUtils;
          import org.apache.struts2.util.ServletContextAware;

          import com.opensymphony.xwork2.ActionSupport;

          public class FileUploadAction extends ActionSupport implements ServletContextAware{


              
          private File doc;    

              
          private String docContentType;
              
          private String docFileName;
              
              
          private ServletContext context;  
              
              
              
          public String execute()throws Exception{
                  String target
          =context.getRealPath("/upload");
                  String file
          =generateFileName(docFileName);
                  File dfile
          =new File(target,file);
                  FileUtils.copyFile(doc,dfile);
                  
          return this.SUCCESS;
              }
              
              
          private String generateFileName(String fileName) {
                  DateFormat format 
          = new SimpleDateFormat("yyMMddHHmmss");    
                  String formatDate 
          = format.format(new Date());    
                  
          int random = new Random().nextInt(10000);    
                  
          int position = fileName.lastIndexOf(".");    
                  String extension 
          = fileName.substring(position);    
                  
          return formatDate + random + extension;    
              }
              
              
          public void setServletContext(ServletContext context) {
                  
          // TODO Auto-generated method stub
                  this.context=context;
              }


              
          public ServletContext getContext() {
                  
          return context;
              }


              
          public void setContext(ServletContext context) {
                  
          this.context = context;
              }


              
          public File getDoc() {
                  
          return doc;
              }


              
          public void setDoc(File doc) {
                  
          this.doc = doc;
              }




              
          public String getDocContentType() {
                  
          return docContentType;
              }

              
          public void setDocContentType(String docContentType) {
                  
          this.docContentType = docContentType;
              }

              
          public String getDocFileName() {
                  
          return docFileName;
              }

              
          public void setDocFileName(String docFileName) {
                  
          this.docFileName = docFileName;
              }
              
              
              
              
          }



          1:在action中定義的變量,在jsp頁面中顯示用:<s:property value="變量名" />

          2:在頁面中實現自動增加的序號用iterator的statuts的index屬性 eg:

          <s:iterator value="#request.inOutAccountList" id="data" status="listStat">

          <s:property value="#listStat.index+1"/>

          </s:iterator>

          3:在action類中取得request和session對象的方法

          Map session = ActionContext.getContext().getSession();
          HttpServletRequest request = ServletActionContext.getRequest ();

          設置它們的值的方法

          session.put("operation", "add");
          request.setAttribute("name", name);

          頁面中取得它們的值:

          <s:property value="#session.operation"/>
          <s:property value="#request.name"/>

          4:頁面中奇偶行樣式不一樣的控制方法:

          <tr class="<s:if test='#listStat.odd == true '>tableStyle-tr1</s:if><s:else>tableStyle-tr2</s:else>" >

          5:單選框和復選框的使用方法

          1):可以設置默認選中值,注意list的值的設置,通過這種方式使key和value不一樣,這種方法比較常用(checkboxlist or radio)

          <s:radio name="uncarInsPolicy.policyStateCode"
          list="#{'5':'通過' , '2':'不通過'}"
          listKey="key"
          listValue="value"
          value='5'
          />

          2):這里的key和value的值是一樣的(checkboxlist or radio)

          <s:checkboxlist
          list="{'Red', 'Blue', 'Green'}"
          name="favoriteColor"/>

          6:struts2 中的標簽會生成類似由<tr><td></td></tr>構成的字串(具體什么標簽生成什么,可以查看生成后的頁面的源代碼)如果不限制這些多余代碼的生成,頁面將變得無法控制,所以一般我們是不希望它生成多余的代碼的,具體的設置方法如果,在struts.xml中統一配置
          <constant name="struts.ui.theme" value="simple"/>加上該句即可
          也可以通過在頁面中將tag的theme屬性設為"simple"取消其默認的表格布局
          不過最好是:自定義一個theme,并將其設為默認應用到整個站點,如此一來就可以得到統一的站點風格

          7:jsp頁面中格式化日期的方法

          <s:date name="unCarInsModificationInfo.createTime" format="yyyy-MM-dd" nice="false"/>這樣就可以將日期格式化為yyyy-MM-dd的形式

          8:默認情況下,當請求action發生時,Struts運行時(Runtime)根據struts.xml里的Action映射集(Mapping),實例化action對應的類,并調用其execute方法。當然,我們可以通過以下兩種方法改變這種默認調用

          1)在classes/sturts.xml中新建Action,并指明其調用的方法
          比如想調用action類中的

          public String aliasAction() {
          message ="自定義Action調用方法";
          return SUCCESS;
          }
          則在classes/sturts.xml中加入下面代碼:
          <action name="AliasHelloWorld" class="tutorial.HelloWorld" method="aliasAction">
          <result>/HelloWorld.jsp</result>
          </action>
          既可用action名調用該方法了

          2)(比較常用)

          訪問Action時,在Action名后加上“!xxx”(xxx為方法名)。

          9:Struts 2.0有兩個配置文件,struts.xml和struts.properties都是放在WEB-INF/classes/下。
          struts.xml用于應用程序相關的配置
          struts.properties用于Struts 2.0的運行時(Runtime)的配置

          10:在action類中取得web下某一文件夾物理路徑(絕對路徑)的方法
          filePath = ServletActionContext.getServletContext().getRealPath("/upLoadFiles")

          11:要想返回的頁面不是一個直接JSP頁面而是要先通過返回action中的方法讀取相應的數據再返回到jsp頁面,有兩種方法

          1)在struts.xml中這么設置

          <result name="list" type="redirect-action">sysmanage/UserBaseInfoAction!findUserBaseInfo.action</result>

          2)在action中返回時直接調用這個方法即可

          return findList();

          12:設置checkboxlist中默認值的方法

          <s:checkboxlist name="skills1"
          ="Skills 1"
          list="{ 'Java', '.Net', 'RoR', 'PHP' }"
          value="{ 'Java', '.Net' }" />
          <s:checkboxlist name="skills2"
          label="Skills 2"
          list="#{ 1:'Java', 2: '.Net', 3: 'RoR', 4: 'PHP' }"
          listKey="key"
          listValue="value"
          value="{ 1, 2, 3 }"/>

          13:二級級連下拉框

          <s:set name="foobar"
          value="#{'Java': {'Spring', 'Hibernate', 'Struts 2'}, '.Net': {'Linq', ' ASP.NET 2.0'}, 'Database': {'Oracle', 'SQL Server', 'DB2', 'MySQL'}}" />
          <s:doubleselect list="#foobar.keySet()"
          doubleName="technology"
          doubleList="#foobar[top]"
          label="Technology" />
          posted on 2007-10-31 15:15 有貓相伴的日子 閱讀(8408) 評論(1)  編輯  收藏 所屬分類: j2ee

          評論:
          本站不再更新,歡迎光臨 java開發技術網
          主站蜘蛛池模板: 海宁市| 甘孜县| 万全县| 南木林县| 阳山县| 平潭县| 津市市| 海兴县| 河间市| 石台县| 莱州市| 黑水县| 揭阳市| 高州市| 安岳县| 仲巴县| 安宁市| 恩平市| 正定县| 五家渠市| 天津市| 工布江达县| 翁牛特旗| 玛纳斯县| 乌鲁木齐市| 当雄县| 长沙县| 卢龙县| 凭祥市| 巴马| 西昌市| 太谷县| 怀集县| 兰坪| 双牌县| 江安县| 漾濞| 河西区| 司法| 耿马| 清徐县|