<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 飛飛 閱讀(208) | 評論 (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 飛飛 閱讀(229) | 評論 (0)編輯 收藏

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

    僅列出標題
    共12頁: First 上一頁 3 4 5 6 7 8 9 10 11 下一頁 Last 
    主站蜘蛛池模板: 国产成人A亚洲精V品无码| 亚洲一区免费视频| 最近新韩国日本免费观看| 亚洲乱码在线观看| 亚洲一区无码精品色| 在线观看免费中文视频| 国产精品亚洲片在线花蝴蝶 | 亚洲国产成人影院播放| 嫩草在线视频www免费观看| 中文字幕无码精品亚洲资源网久久| 亚洲国产激情一区二区三区| 99re6热视频精品免费观看| 无码色偷偷亚洲国内自拍| 亚洲成熟xxxxx电影| 在线永久免费观看黄网站| 桃子视频在线观看高清免费视频| 亚洲国产欧美日韩精品一区二区三区 | 国产日韩在线视频免费播放| 亚洲国产中文在线视频| 亚洲中文字幕在线乱码| 免费黄色毛片视频| 免费视频成人片在线观看| 香港经典a毛片免费观看看| 亚洲码在线中文在线观看| a级亚洲片精品久久久久久久| 免费在线观看的网站| 久久精品成人免费看| 深夜福利在线视频免费| 亚洲成人激情小说| 91在线亚洲精品专区| 久久久亚洲精品蜜桃臀| 国产美女a做受大片免费| 国产在线jyzzjyzz免费麻豆| baoyu116.永久免费视频| 免费播放国产性色生活片| 亚洲视频在线观看2018| 久久精品亚洲一区二区三区浴池 | 精品福利一区二区三区免费视频| 亚欧国产一级在线免费| 真正全免费视频a毛片| 最新亚洲精品国偷自产在线 |