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

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

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


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

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

          如果要實(shí)現(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,會(huì)執(zhí)行默認(rèn)方法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頁(yè)面中顯示用:<s:property value="變量名" />

          2:在頁(yè)面中實(shí)現(xiàn)自動(dòng)增加的序號(hào)用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對(duì)象的方法

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

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

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

          頁(yè)面中取得它們的值:

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

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

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

          5:單選框和復(fù)選框的使用方法

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

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

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

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

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

          7:jsp頁(yè)面中格式化日期的方法

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

          8:默認(rèn)情況下,當(dāng)請(qǐng)求action發(fā)生時(shí),Struts運(yùn)行時(shí)(Runtime)根據(jù)struts.xml里的Action映射集(Mapping),實(shí)例化action對(duì)應(yīng)的類,并調(diào)用其execute方法。當(dāng)然,我們可以通過(guò)以下兩種方法改變這種默認(rèn)調(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)(比較常用)

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

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

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

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

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

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

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

          return findList();

          12:設(shè)置checkboxlist中默認(rèn)值的方法

          <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:二級(jí)級(jí)連下拉框

          <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) 評(píng)論(1)  編輯  收藏 所屬分類: j2ee

          評(píng)論:
          本站不再更新,歡迎光臨 java開發(fā)技術(shù)網(wǎng)
          主站蜘蛛池模板: 仁布县| 临潭县| 防城港市| 乃东县| 于田县| 金阳县| 巴中市| 柞水县| 开封县| 明溪县| 资阳市| 平昌县| 黄陵县| 连山| 中超| 新竹市| 满城县| 佳木斯市| 南溪县| 兴仁县| 勐海县| 榆林市| 建水县| 龙川县| 南川市| 满洲里市| 北票市| 康乐县| 许昌市| 绥芬河市| 广元市| 镇康县| 无锡市| 丹棱县| 麦盖提县| 安阳县| 保山市| 五指山市| 库车县| 哈密市| 苗栗市|