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

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

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


          2、Ioc 方式
                 只要Action類實現(xiàn)SessionAware, ServletRequestAware, ServletResponseAware這幾個接口,相應(yīng)的變量會自動注入

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

          如果要實現(xiàn)類似于Structs1.x那樣的DispatchAction方式的調(diào)用,配置例子如下:
                  <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>
          如上配置,如果只調(diào)用login.action,會執(zhí)行默認方法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:在頁面中實現(xiàn)自動增加的序號用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 ();

          設(shè)置它們的值的方法

          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:單選框和復(fù)選框的使用方法

          1):可以設(shè)置默認選中值,注意list的值的設(shè)置,通過這種方式使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>構(gòu)成的字串(具體什么標簽生成什么,可以查看生成后的頁面的源代碼)如果不限制這些多余代碼的生成,頁面將變得無法控制,所以一般我們是不希望它生成多余的代碼的,具體的設(shè)置方法如果,在struts.xml中統(tǒng)一配置
          <constant name="struts.ui.theme" value="simple"/>加上該句即可
          也可以通過在頁面中將tag的theme屬性設(shè)為"simple"取消其默認的表格布局
          不過最好是:自定義一個theme,并將其設(shè)為默認應(yīng)用到整個站點,如此一來就可以得到統(tǒng)一的站點風(fēng)格

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

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

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

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

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

          2)(比較常用)

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

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

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

          11:要想返回的頁面不是一個直接JSP頁面而是要先通過返回action中的方法讀取相應(yīng)的數(shù)據(jù)再返回到j(luò)sp頁面,有兩種方法

          1)在struts.xml中這么設(shè)置

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

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

          return findList();

          12:設(shè)置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 有貓相伴的日子 閱讀(8407) 評論(1)  編輯  收藏 所屬分類: j2ee

          評論:
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 松原市| 平原县| 安庆市| 古丈县| 荔波县| 廊坊市| 江津市| 会东县| 纳雍县| 湄潭县| 金秀| 东乌珠穆沁旗| 周宁县| 绥化市| 罗山县| 余江县| 福安市| 怀安县| 喀喇沁旗| 托克托县| 巩留县| 丽江市| 东至县| 谢通门县| 株洲县| 四平市| 勐海县| 汾西县| 自治县| 黎城县| 微山县| 大兴区| 永泰县| 北流市| 关岭| 延庆县| 体育| 托克逊县| 七台河市| 东阳市| 海门市|