欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞

      時間:2019-05-12 01:55:27下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關的《基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞》。

      第一篇:基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞

      chain:基本用途是構造成一條動作鏈。前一個Action將控制權轉交給后一個Action,而前一個Action的狀態(tài)在后一個Action里仍然保持著。

      我現(xiàn)在有一個場景,F(xiàn)irstAction 通過chain的方式,將控制權交給 SecondAction。FirstAction對應的頁面代碼為first.ftl,SecondAction對應的頁面代碼為second.ftl。假設我們的FirstAction如下定義:

      public class SecondAction extends ActionSupport{ private CustomUser user = null;

      public String execute()throws Exception { // 利用user做事情或顯示在頁面上 }

      // getter setter }

      意思很明確了,通過first.ftl的輸入,到DB中或其他,生成了我們的CustomUser對象,這個CustomUser對象將要在SecondAction使用。

      于是我們想到了要配置FirstAction 的 name為toSecond的 Result type為 chain,將 生成的CustomUser對象傳遞到 SecondAction中,我們也這樣做了,但是 經(jīng)過調(diào)試,發(fā)現(xiàn)在SecondAction中沒有得到 FirstAction中的CustomUser對象。

      SecondAction是這樣實現(xiàn)的:

      public class SecondAction extends ActionSupport{ private CustomUser user = null;

      public String execute()throws Exception { // 利用user做事情或顯示在頁面上 }

      // getter setter }

      看一下ChainingInterceptor.java的實現(xiàn),發(fā)現(xiàn)有這樣的注釋:

      An interceptor that copies all the properties of every object in the value stack to the currently executing object

      .在 FirstAction 中CustomUser user 并沒有在 value stack 中,所以沒有拷貝到SecondAction中。

      知道了問題所在,就要解決。首先是想換一種方式去做,將我們要傳遞的參數(shù)通過 其他 Result type 如redirectAction去傳遞。例如:

      SecondAction

      execute

      ${user}

      但這樣做的缺點是,1.我們要在瀏覽器上看到很長很亂的URL(如果超過URL長度限制那就更悲劇了)。2.暴露這些參數(shù)總感覺很不爽。

      3.自定義的對象不能用這種方式傳遞,要么傳String、或JsonObject等。

      另外一個解決辦法:

      因為Result type為chain時,在執(zhí)行SecondAction時,它的上一個Action,也就是FirstAction的實例并沒有被銷毀,F(xiàn)irstAction的實例被加入到了ValueStack中。所以,實現(xiàn)的思路就是,增加一個攔截器,在執(zhí)行Actioin前判斷一下,當前Action是否需要從前面的Action實例中獲取數(shù)據(jù)。

      這個可以通過注解的方式告訴攔截器,當前的action需要什么樣的對象。思路明確了,來看看代碼: 注解類:ChainTransParam.java import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;

      @Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)@Documented public @interface ChainTransParam { String fieldName()default “";}

      攔截器實現(xiàn):ChainParameterInterceptor.java /** * Result type 為chain時 可通過注解的方式實現(xiàn)參數(shù)傳遞 此參數(shù)為前置Action的成員變量、并提供getter方法

      * 此參數(shù)并不要求一定要在值棧中 * * @author liming */

      public class ChainParameterInterceptor extends AbstractInterceptor {

      private static final long serialVersionUID =-***6358L;

      @Override public String intercept(ActionInvocation invocation)throws Exception { ValueStack stack = invocation.getStack();CompoundRoot root = stack.getRoot();

      // 值棧不為null 且已經(jīng)有前置Action // 棧最頂層(index = 0)為當前Action、緊接著(index = 1)為前置Action if(root == null || root.size()<= 2){ return invocation.invoke();}

      // 當前Action對象

      Object target = invocation.getAction();

      Field[] fields = target.getClass().getDeclaredFields();

      // 遍歷此Action對象的屬性 是否有RecieveData注解

      for(Field field : fields){ if(field.isAnnotationPresent(ChainTransParam.class)){ ChainTransParam rData = field.getAnnotation(ChainTransParam.class);// 取得源數(shù)據(jù)字段名

      String fromName = rData.fieldName();fromName = StringUtils.isEmpty(fromName)? field.getName(): fromName;

      // 取得最近的前置Action Object srcAction = root.get(1);

      // 取得對應字段的值

      Object value = ReflectionUtils.getFieldValue(srcAction, srcAction.getClass(), field.getName());// 設定值

      ReflectionUtils.setFieldValue(target, field.getName(), field.getType(), value);} }

      return invocation.invoke();}

      @SuppressWarnings(”unused“)private Object findFieldValue(CompoundRoot root, Field field){ Object value = null;

      int size = root.size();

      // 按順序遍歷前置Action for(int index = 1;index < size;index++){ Object srcAction = root.get(index);

      Object tmp = ReflectionUtils.getFieldValue(srcAction, srcAction.getClass(), field.getName());// 取得對應字段的值 則返回

      // 問題:如果前置Action中該字段本身就為null 則無法處理 if(tmp!= null){ break;} }

      return value;} }

      在攔截器的實現(xiàn)中,我是只取得前一個Action中的數(shù)據(jù),并沒有迭代尋找整個ValueStack的Action,也是可以這樣實現(xiàn)的,請看我的findFieldValue方法的實現(xiàn),但這個方法在此攔截器中并沒有使用上。因為我不想這樣做。代碼完畢之后,配置好攔截器,我們只要在 SecondAction中 這樣定義即可:

      public class SecondAction extends ActionSupport{ @ChainTransParam private CustomUser user = null;

      public String execute()throws Exception { // 利用user做事情或顯示在頁面上 }

      // getter setter }

      當在執(zhí)行SecondAction之前,攔截器會去查找FirstAction,是否有 user 對象,有則將值拷貝到 SecondAction 中。

      ChainTransParam 注解 允許輸入?yún)?shù)名,沒有輸入則默認根據(jù)變量名去查找。

      注:Struts2 Reference里的意思是不提倡使用Result Type Chain。

      另:ReflectionUtils.java 實現(xiàn): import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;

      import org.apache.commons.lang.StringUtils;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;

      public abstract class ReflectionUtils { private static final Log logger = LogFactory.getLog(ReflectionUtils.class);

      public static void setFieldValue(Object target, String fname, Class ftype, Object fvalue){ setFieldValue(target, target.getClass(), fname, ftype, fvalue);}

      public static void setFieldValue(Object target, Class clazz, String fname, Class ftype, Object fvalue){ if(target == null || fname == null || ”“.equals(fname)||(fvalue!= null &&!ftype.isAssignableFrom(fvalue.getClass()))){ return;}

      try { Method method = clazz.getDeclaredMethod(”set“ + Character.toUpperCase(fname.charAt(0))+ fname.substring(1), ftype);//if(!Modifier.isPublic(method.getModifiers())){ method.setAccessible(true);//} method.invoke(target, fvalue);} catch(Exception me){ if(logger.isDebugEnabled()){ logger.debug(me);}

      try { Field field = clazz.getDeclaredField(fname);//if(!Modifier.isPublic(field.getModifiers())){ field.setAccessible(true);//} field.set(target, fvalue);} catch(Exception fe){ if(logger.isDebugEnabled()){ logger.debug(fe);} } } }

      public static Object getFieldValue(Object target, String fname){ return getFieldValue(target, target.getClass(), fname);}

      public static Object getFieldValue(Object target, Class clazz, String fname){ if(target == null || fname == null || ”“.equals(fname)){ return null;}

      boolean exCatched = false;try { String methodname = ”get" + StringUtils.capitalize(fname);Method method = clazz.getDeclaredMethod(methodname);//if(!Modifier.isPublic(method.getModifiers())){ method.setAccessible(true);//} return method.invoke(target);} catch(NoSuchMethodException e){ exCatched = true;} catch(InvocationTargetException e){ exCatched = true;} catch(IllegalAccessException e){ exCatched = true;}

      if(exCatched){ try { Field field = clazz.getDeclaredField(fname);//if(!Modifier.isPublic(field.getModifiers())){ field.setAccessible(true);//} return field.get(target);} catch(Exception fe){ if(logger.isDebugEnabled()){ logger.debug(fe);} } } return null;} }

      第二篇:工地數(shù)據(jù)傳遞流程規(guī)定

      工作流程規(guī)定

      為確保各部門、各項目部數(shù)據(jù)信息上報渠道暢通,做到信息資源共享,特制定工作流程規(guī)定如下:

      一、數(shù)據(jù)信息傳輸渠道

      項目部數(shù)據(jù)信息傳輸及原始單據(jù)和憑證,可采取郵件、短信及郵寄等方式。一是所有生產(chǎn)施工數(shù)據(jù)信息,傳公司經(jīng)營部造價員處;二是所有工程內(nèi)業(yè)資料信息,傳經(jīng)營部資料員處;三是所有物資采購申請與消耗數(shù)據(jù)信息,傳經(jīng)營部物資助理處;四是所有行政、人事信息資料,傳綜合部人力資源助理處;五是所有原始單據(jù)和憑證,郵寄財務部出納處。

      二、數(shù)據(jù)信息傳輸時間規(guī)定

      (一)生產(chǎn)日報表

      項目部出納(或指定人員),每天的產(chǎn)值、點工及運輸?shù)热請蟊?,務于次?2點前上傳公司經(jīng)營部;同時,將現(xiàn)金日記帳上傳財務部。

      (二)票據(jù)報送

      項目部出納(或指定人員)每月3號、15號、25號前,將所有原始單據(jù)和憑證(包括費用報銷單、供應商送貨單、與甲方有關業(yè)務單據(jù)、出入庫單及相關統(tǒng)計報表等),寄回公司財務部。

      (三)驗工計價單

      項目部出納(或指定人員)每月28號前,將甲方驗工計價單及班組、點工結算單上傳公司經(jīng)營部。

      (四)材料消耗表與物資計劃、采購申請單

      每周一,項目部出納(或指定人員)將生產(chǎn)消耗主、輔材料統(tǒng)計表上傳公司經(jīng)營部;每月15號、30號前,項目部出納(或指定人員)將物資計劃、采購申請單上傳經(jīng)營部。

      (五)考勤表與請假單

      每月3號前,項目部出納(或指定人員)將項目負責人審核簽字的上月考勤表及請假單一并上傳公司綜合部;每月10號前,綜合部統(tǒng)計核實完畢各部門及項目部考勤,一并交到財務部,作為發(fā)放工資的依據(jù)。

      (六)會議記錄

      項目部每周必須召開一次工作例會,出納(或指定人員)務于次日12點前,將會議記錄上傳公司綜合部。

      (七)考核表(具體考核目標,視各項目而定)

      每月30日前,分管副總負責對所屬項目負責人(項目經(jīng)理、副經(jīng)理)當月完成目標產(chǎn)值、安全文明施工等情況進行考核,項目負責人對所屬現(xiàn)場管理人員履行職責、生產(chǎn)施工監(jiān)管等情況進行考核,并于次月3號前將考核結果上傳公司綜合部。

      (八)用工協(xié)議與離職報告

      項目用工需與項目部負責人簽訂用工協(xié)議,辭職需寫離職報告并經(jīng)項目負責人簽字同意,并在第一時間將當事人用工協(xié)議、身份證件、離職報告等人事資料,掃描上傳公司綜合部。

      上述報送內(nèi)容,不按規(guī)定時間報送的,延誤一天/項處罰50元。此規(guī)定自二0一四年元月一日起執(zhí)行,執(zhí)行中若有不妥之處,請各部門、各項目部及時提出,以便修訂和完善。

      綜合部

      二0一三年十二月三十一日

      第三篇:不同數(shù)據(jù)庫之間數(shù)據(jù)轉移經(jīng)驗總結

      不同數(shù)據(jù)庫之間數(shù)據(jù)轉移經(jīng)驗總結 http://

      不知道是不是自己幸運還是不幸,工作就一年的時間,我卻接觸了兩次程序改版,而且是之間將其他語言寫的程序改成php的。我其實覺得這是幸運。第一個是.net寫的一個導醫(yī)系統(tǒng),使用的access數(shù)據(jù)庫,第二個是.net寫的一個內(nèi)容管理系統(tǒng),使用的sqlsever數(shù)據(jù)庫。都要改為php+mysql的。從這兩次經(jīng)驗中,我的確是學到了不少東西。并且也千萬不要以為是多么復雜的事情,雖然是有點復雜。

      既然是程序改版,當然就要涉及到原來數(shù)據(jù)的轉移,雖然時下有不少所謂的數(shù)據(jù)轉移工具,但是我們學習程序的人也知道,不同的數(shù)據(jù)庫結構設置等等肯定有差別,而且還有令很多人頭疼的編碼問題,對于編碼問題,我也是有一些研究的,過幾天會寫一個有關程序編碼的問題的總結。今天我主要是說說我們怎么來做不同數(shù)據(jù)庫之間的數(shù)據(jù)轉移。授人以魚不如授人以漁。相信對要做類似功能(比如數(shù)據(jù)處理、往期數(shù)據(jù)分析、數(shù)據(jù)轉移等)的程序員有一定的幫助。

      首先的前提是,不要奢望有最便捷成型的現(xiàn)成程序或軟件來幫你,最好就是通過自己熟悉的語言,自己動手寫程序來轉移。

      程序數(shù)據(jù)轉移以我的方式來分的話可以分為兩大類,當然可以更加細分。第一類是:由其他程序轉移到自己專業(yè)的開源程序;第二類是由其他程序轉移到自己專業(yè)的自己開發(fā)或自己團隊開發(fā)的私有程序。不要小看,這有很大的不同。如果是轉移到開源程序,雖然人家是開源的,但是不見得我們就完全熟悉人家的每個功能與設計吧,尤其是數(shù)據(jù)庫字段的設計。那么我們在數(shù)據(jù)轉移前就要仔細分析其數(shù)據(jù)庫、表設計,而如果是自己的程序,就相對從容了許多。而來源數(shù)據(jù)因為是自己不熟悉,甚至是根本不知道的程序寫的,那更要分析了,這就不用說了。

      那么首先就先說說分析數(shù)據(jù),1是分析舊版程序,程序都是相通的,有的時候我們轉移數(shù)據(jù)并一定是說有數(shù)據(jù),可能有的你只要轉移文章表,轉移較之采集(雖然也可以用采集實現(xiàn))的好處就是可以保證數(shù)據(jù)的高度一致,就是id這個字段也一樣,因為文章很多都是用id組合的文件名、路徑,這樣我們就可以通過配合欄目目錄保證文章的路徑不變。如果是內(nèi)容管理系統(tǒng)類的舊程序,最好也是往自己熟悉的開源程序上轉,以為這些開源程序歷經(jīng)時間的考驗真的是相當?shù)耐晟疲辽僖饶阕约嚎紤]的要全面很多,比如織夢、帝國這樣的開源程序,其巧妙的模型設計幾乎可以讓我們實現(xiàn)任何功能。而一些系統(tǒng)類、功能類的程序,可能用一些這樣的內(nèi)容管理開源程序就不合適了,最好就是自己開發(fā)了。而分析舊版程序也沒有必要讓你直接學會另一門語言,我們只需要通過后臺、數(shù)據(jù)庫、前端,來弄清楚數(shù)據(jù)的結構,展示、分類、等等。比如文章類的,我們要找清楚對應的分類,對應的表在哪里,是單獨的表還是所有分類都是用的一個表(這個很重要),就足夠了,因為內(nèi)容類的,我們幾乎就是需要其文章內(nèi)容;而系統(tǒng)類的,就比較麻煩一點,人家可能要求盡可能保證原來所有的數(shù)據(jù),那我們在沒有舊版程序開發(fā)說明書的情況下就要自己摸索了,最好能自己裝個測試版,一個功能一個功能的來分析,今天操作,記錄數(shù)據(jù)庫數(shù)據(jù)變化,結合其字段注釋,自己的嘗試經(jīng)驗等來分析各個字段的意義。弄清楚了這個就好辦了,一個系統(tǒng)真正復雜的表其實也沒幾個,先從簡單的入手,因為表直接可能是有聯(lián)系的,你簡單的不明白是不可能弄懂其在別的表作為外鍵時的意義的。并且最好是有測試人員或輔助人員,因為自己很容易就弄亂。

      2是分析新版系統(tǒng),新版系統(tǒng)針對的是我們使用的開源系統(tǒng),最重要的一點就是要添加測

      試數(shù)據(jù)測試,因為一般情況下我們都知道數(shù)據(jù)庫設計的時候都是有一些默認或初始值的,在我們搞不清楚字段初始值是怎樣的情況下,可以在開源程序中加一個默認數(shù)據(jù),根據(jù)這條數(shù)據(jù),來判斷默認值,這樣在轉移的時候一定注意給這些需要加初始值的字段添加正確的初始值(雖然數(shù)據(jù)設計中可能有的會自動加初始值,但是在一些特殊情況下回不起作用,所以要注意)。

      分析數(shù)據(jù)是一個比較繁瑣的事情,但是,我們在分析數(shù)據(jù)的時候其實可以和轉移程序開發(fā)同時進行,這個轉移程序是數(shù)據(jù)轉移的重點,只是單純的分析,永遠也搞不清楚,有的時候做事情要先著手去做,做的過程中就會有了思路。下面就說說如何做轉移程序。

      我是學php的,當然做的這兩個項目都是改成php程序,但是無論什么程序,基本都會有操作不同數(shù)據(jù)庫的接口,類庫或者擴展等等,php就有很多,幾乎可以操作所有類型的數(shù)據(jù)庫,不過,其操作不同數(shù)據(jù)庫的能力是不同的,比如,php對mysql的操作幾乎是最方便的,而對sqlsever和access的操作就弱了一些,雖然有一些類庫,但是有的時候因為版本的不同而無法使用,所以我們要盡量的從底層代碼來寫轉移程序,有的時候,我們也可以通過一些中間手段,就比如字符編碼一樣,所有編碼都可以和utf-8進行轉換,我要在另外兩者間轉換,可以通過utf-8作為中間人。數(shù)據(jù)轉移也是一樣,有的時候我們通過自己的程序很難操作人家的數(shù)據(jù)庫,但是他可以轉換為一個你可以操作的數(shù)據(jù)庫也可以。以mysql來說,mysql可以存儲為sql文件,或者是任何的文件,只需要在里面存儲sql語句,用程序讀取執(zhí)行就可以。其他程序也是一樣,我們就通過讀取出原始數(shù)據(jù),用php或你的專業(yè)語言,進行sql重組。然后執(zhí)行插入,而中間要注意的就是一些編碼、特殊字符、已經(jīng)一些字段類型!盡量的讓自己寫的轉移程序體驗好一些、也就是智能一些,有比較好的擴張性,可以節(jié)省大量代碼!其實就是提取封裝一下!

      任何程序的操作,其實都是對數(shù)據(jù)的操作!

      第四篇:MATLAB GUI數(shù)據(jù)傳遞總結

      Matlab的GUI參數(shù)傳遞方式總結

      其實Matlab提供了很多種直接或間接方法實現(xiàn)多fig中的數(shù)據(jù)共享,只是大家沒有注意

      罷了:

      1、全局變量

      2、作為函數(shù)的參數(shù)傳遞

      3、利用控件的userdata數(shù)據(jù)

      4、為handles結構體添加新字段

      5、setappdata函數(shù)為句柄添加數(shù)據(jù)

      6、跨空間計算evalin和賦值assignin

      7、將數(shù)據(jù)保存到文件,需要時讀取

      8、帶參數(shù)調(diào)用GUI的M文件

      9、嵌套函數(shù)(不適用于GUIDE中,只適用純命令是的GUI)

      一、全局變量

      運用global定義全局變量傳遞參數(shù),適用于gui內(nèi)控件間以及不同gui間。這種方式恐怕是最簡單的方式,是很省心!但是,簡單的問題就在于有時你會很頭疼!因為在每一個要到該全局變量的地方,你都要添一句gloal x,還有就是如果你在一個地方修改了 x的值,那么所有x的值就都變了!有的時候恐怕會出現(xiàn)紊亂。另一個更重要的問題在于,套用C++的一句話,全局變量破壞了程序的封裝性!所以,全局變量是能少用盡量少用。

      以下創(chuàng)造一個簡單的GUI給大家說明一下,建一個GUI,包含兩個按鈕,一個坐標系,一個用來畫y=sin(x),一個用來畫y=cos(x);eg:在GUI的OpeningFcn函數(shù)中寫: global x y1 y2 x=0:.1:2*pi;y1=sin(x);y2=cos(x);在pushbutton1_Callback函數(shù)中寫 Global x y1 Plot(x,y1)在pushbutton1_Callback函數(shù)中寫 Global x y2 Plot(x,y2)全局變量是比較方便的,但全局變量會破壞封閉性,如果不是有大量數(shù)據(jù)要傳遞,建議不要使用。

      二、運用gui本身的varain{}、varaout{}傳遞參數(shù)

      這種方式僅適用于gui間傳遞數(shù)據(jù),且只適合與主子結構,及從主gui調(diào)用子gui,然后關掉子gui,而不適合遞進結構,即一步一步實現(xiàn)的方式。輸入?yún)?shù)傳遞(主要在子gui中設置):

      比如子GUI的名稱為subGUI, 設想的參數(shù)輸入輸出為:[out1, out2] = subGUI(in1, in2)在subGUI的m文件中(由GUIDE自動產(chǎn)生):

      1.第一行的形式為:function varargout = subGUI(varargin)該行不用做任何修改;varargin 和 varargout 分別是一個可變長度的cell型數(shù)組。輸入?yún)?shù)in1和in2保存在varargin中,輸出參數(shù)out1,out2包含在varargout中; 2.在subGUI的OpeningFcn中,讀入?yún)?shù),并用guidata保存,即: handles.in1 = varargin{1};handles.in2 = varargin{2};guidata(hObject, handles);返回參數(shù)的設置:

      1.在主GUI的OpeningFcn函數(shù)中加上[out1, out2] = subGUI(in1, in2),用于調(diào)用子gui,并在結尾加上uiwait(handles.figure1);figure1是subGUI的Tag,主要是等待調(diào)用子gui的過程,從而獲得子gui的輸出參數(shù)out1、out2;

      2.subGUI中控制程序結束(如“OK”和”Cancel"按鈕)的callback末尾加上uiresume(handles.figure1),注意是主gui的窗口handles.figure1,不要將delete命令放在這些callback中;

      3.在子GUI的OutputFcn中設置要傳遞出去的參數(shù),如 varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加 delete(handles.figure1);結束程序。

      在GUI的OpenFcn中,如果不加uiwait,程序會直接運行到下面,執(zhí)行OutputFcn。也就是說程序一運行,返回值就確定了,再在其它部分對handles.output作更改也沒有效果了。

      加上uiwait后,只有執(zhí)行了uiresume后,才會繼續(xù)執(zhí)行到OutputFcn,在此之前用戶有充分的時間設置返回值。

      通過以上設置以后,就可以通過 [out1, out2] = subGUI(in1, in2)的形式調(diào)用該子程序。

      在一個GUI中調(diào)用另一個GUI時,主GUI不需要特別的設置,同調(diào)用普通的函數(shù)一樣。在打開子GUI界面的同時,主程序還可以響應其它的控件。不需要擔心子GUI的返回值被傳錯了地方。

      三、userdata數(shù)據(jù)

      直接通過對象的userdata屬性進行各個callback之間的數(shù)據(jù)存取操作,主要適用于gui內(nèi)。首先必須將數(shù)據(jù)存儲到一個特定的對象中,假設對象的句柄值為ui_handle,需要存儲的值為value,則輸入以下程序即可:

      set('ui_handle','UserData',Value);此時,value數(shù)據(jù)就存在句柄值為ui_handle的對象內(nèi),在執(zhí)行的過程中若要取回變量可以通過以下方式在任意callback中獲取該數(shù)據(jù)值 :

      value=get(''ui_handle,'UserData');雖然使用這種方法簡單,但是每個對象僅能存取一個變量值,因此當同一對象存儲兩次變量時,先前的變量值就會被覆蓋掉,因此都用UserData存儲簡單與單一的數(shù)據(jù)。如下面有兩個gui函數(shù),myloadfn加載mydata.mat文件,該文件內(nèi)存儲XYData變量,其值為m*2的繪圖矩陣,加載后將該變量值存儲到 當前的窗口的UserData屬性中。另一個myplotfcn函數(shù)則是用以獲取該UserData屬性中存取的繪圖數(shù)據(jù),然后繪圖。代碼如下:

      function myloadfcn load mydata;set(gcbf,'UserData',XYdata)

      function myplotfcn XYdata=get(gcbf,'UserData');x=XYData(:,1);y=XYData(:,2);plot(x,y);userdata的缺點就是一個句柄只能放一個Userdata。

      四、GUI數(shù)據(jù)(handles)

      結合handles和guidata函數(shù),適用于gui內(nèi),如果你在pushbutton1中得到一個變量X,相傳出去,那么在pushbutton1的callback中,在得到X后添加如下代碼: handles.X=X;guidata(hObject,handles)(注意,一定是兩行連寫)在pushbutton2中要用到X是,在其callback先添加 X=handles.X; 即可得到X的值。注:

      1.guidata(object_handle,data);如果object_handle不是figure型句柄,那么會將data保存在object_handle的父figure對象中。這樣不必擔心在一個pushbutton的callback中存儲的變量在其他對象中無法提取。

      2.data = guidata(object_handle);獲取當前object_handle的handles數(shù)據(jù),最后一次guidata(object_handle,data)保存的數(shù)據(jù)。

      一個簡單的GUI給大家說明一下,建一個GUI,包含兩個按鈕,一個坐標系,一個用來畫y=sin(x),一個用來畫y=cos(x);eg:在GUI的OpeningFcn函數(shù)中寫: x=0:.1:2*pi;y1=sin(x);y2=cos(x);handles.x=x;handles.y1=y1;handles.y2=y2;guidata(hObject, handles);%注意,在OpeningFcn函數(shù)中這句是本身存在的,若在其它函數(shù)中,務必加上這句

      在pushbutton1_Callback函數(shù)中寫 x=handles.x;y1=handles.y1;plot(x,y1)在pushbutton2_Callback函數(shù)中寫 x=handles.x;y2=handles.y2;plot(x,y2)

      五、Application數(shù)據(jù)

      應用setappdatagetappdata與rmappdata函數(shù),適用于gui間和gui內(nèi)。使用上面三個函數(shù)最有彈性處理數(shù)據(jù)的傳送問題,與UserData的方式相類似,但是克服UserData的缺點,使一個對象能存取多個變量值。

      (1)getappdata函數(shù)

      value=getappdata(h,name)(2)setappdata函數(shù)

      setappdata(h,name,value)(3)rmappdata函數(shù) rmappdata(h,name)首先在matlab命令窗口輸入magic(3)數(shù)據(jù),因此當前的工作空間就存儲了magic(3)這組數(shù)據(jù)了,然后建立一個按鈕來獲取并顯示magic(3)數(shù)據(jù)。A=magic(3);setappdata(gcf,'A',A);%save uicontrol('String','顯示矩陣

      A','callback','A=getappdata(gcf,''A'')');A =

      1 6 3 5 7 4 9 2 當在主、子gui內(nèi)調(diào)用時,可以如下設置

      fig1調(diào)用fig2時,使用fig2指令來打開fig2, 在fig2的m文件中,在回調(diào)函數(shù)中用setappdata(fig1,'A',A);實現(xiàn)返回fig1,并將參數(shù)A傳遞給fig1 然后在fig1的使用A的地方添加A=getappdata(fig1,‘A’)。

      但這種方式的一個問題就是每調(diào)用一次,fig1的數(shù)據(jù)就得初始化一次,這是因為setappdata(fig1,'A',A)中出現(xiàn)了fig1,調(diào)用一次setappdata就得運行一次fig1的緣故,解決方案就是把setappdata(fig1,'A',A)改為setappdata(0,'A',A),這樣把A讀入matlab workspace,相當于一個全局變量了,但當然比直接用global定義全局變量好!同樣的例子:

      eg:在GUI的OpeningFcn函數(shù)中寫: x=0:.1:2*pi;y1=sin(x);y2=cos(x);setappdata(handles.figure1,'x',x)%在figure1下創(chuàng)建’x’,包含數(shù)據(jù)x,也可以放在其它句柄下,如setappdata(handles.pushbutton1,'x',x),不過一般放在figure1下,記起來方便…… setappdata(handles.figure1,'y1',y1)setappdata(handles.figure1,'y2',y2)在pushbutton1_Callback函數(shù)中寫

      x=getappdata(handles.figure1,'x');%提取,當然用get了…… y1=getappdata(handles.figure1,'y1');plot(x,y1)在pushbutton1_Callback函數(shù)中寫

      x=getappdata(handles.figure1,'x');y2=getappdata(handles.figure1,'y2');plot(x,y2)

      六、跨空間計算evalin和賦值assignin 適用于gui間和gui內(nèi) Assignin函數(shù)基本語法

      assignin(ws, 'var', val)其中'base' or 'caller',分別表示基本工作空間和調(diào)用函數(shù)(caller function)工作空間,Assinin函數(shù)將值val指定給工作空間ws中的變量var,若變量var不存在,則創(chuàng)建一個變量var。從一個函數(shù)function向MATLAB工作空間中輸入數(shù)據(jù); 在一個函數(shù)function內(nèi)部,需要改變一個在caller function函數(shù)工作空間中定義的變量,例如函數(shù)形參列表中的變量。例子:

      %向基本工作空間中傳輸數(shù)據(jù)變量 Function assignin_test1 prompt = {'Enter image name:','Enter colormap name:'};title = 'Image display-assignin example';lines = 1;def = {'my_image','hsv'};answer = inputdlg(prompt,title,lines,def);assignin('base','imfile',answer{1});assignin('base','cmap',answer{2});

      evalin函數(shù)基本語法

      evalin(ws, expression)[a1, a2, a3,...] = evalin(ws, expression)在特定的工作空間執(zhí)行MATLAB語句,expression的形式如

      expression = [string1, int2str(var), string2,...] [a1, a2, a3,...] = evalin(ws, expression),將返回值賦予變量a1,a2,a3,...evalin(ws,'[a1, a2, a3,...] = function(var)')注:

      evalin('caller', expression),只能指定callerfunction函數(shù)中的變量為expression的語句,而不能是subfunction 該函數(shù)不可嵌套使用,evalin('caller', 'evalin(''caller'', ''x'')')是錯誤的

      例子:

      如果在figure1中有個變量a1 則傳入時assignin('base','a1',data)%data是workplace中的變量 在figure2傳出時a2=evalin('base','data');%a2是figure2中的變量

      七、將數(shù)據(jù)保存到文件,需要時讀取

      運用save和load(importdata)傳遞參數(shù),適用于gui間和gui內(nèi)。將某變量x的值先存到磁盤,用的時候在調(diào)用。格式如下:save('*.mat','x');用的時候就用load('*.mat'),但這樣只是把x讀到了matlab workspace,不會用顯示,你還要再去查看這個變量名, 然后才能用,建議使用p=importdata('*.mat'),p是一個結構體,可以隨意使用了。當然,這種方式涉及到磁盤讀寫,速度當然會有影響的,一般情況不用,通常用在保存以及導入某個變量時!

      八、帶參數(shù)調(diào)用GUI的M文件

      這個相信大家都很熟悉了,適用于gui間和gui內(nèi)。

      總結幾點:

      ① 如果變量數(shù)據(jù)量很大,需要占用大量內(nèi)存,不要將變量存儲為handles的變量,因為每個控件每次調(diào)用callback function都會使用handles,增加不必要的內(nèi)存開銷。若改變量存取不頻繁,可以考慮UserData數(shù)據(jù)或者Application數(shù)據(jù);若存取比較頻繁,建議使用Global變量和Application結構體,這里的Application要定義為setappdata(0,'var',val)以及getappdata(0,'var',val)。② 對于GUI界面之間的數(shù)據(jù)傳遞,可以考慮以下幾種方法: 方法1:采用global函數(shù)??梢圆捎眠@種方法共享數(shù)據(jù);

      方法2:采用findobj和findall函數(shù)查找對象句柄 findall(0, 'Type', 'figure', 'Tag', 'figure1')查找標簽為figure1的窗口,無論該窗口是否隱藏。

      方法3:采用handles結構。

      假設我們在窗口1的Opening函數(shù)中,采用函數(shù)創(chuàng)建了一個子窗口2: h_fig = figure('Visible', 'off',...);h_btn1 = uicontrol('Parent', h_fig, ‘Tag', 'btn1',...);h_btn2 = uicontrol('Parent', h_fig, ‘Tag', 'btn2',...);h_btn3 = uicontrol('Parent', h_fig, ‘Tag', 'btn3',...);

      如果我們要在窗口1的任何回調(diào)函數(shù)中,直接訪問子窗口2的任意控件,可以在上述語句后緊跟著寫下如下語句:

      handles.btn1 = h_btn1;handles.btn2 = h_btn2;handles.btn3 = h_btn3;最后,需要一個guidata語句。當然,Opening函數(shù)最后有guidata語句,所以不用自己添加。

      方法4:將要共享的數(shù)據(jù)使用save函數(shù)存入mat文件;或者使用文件I/O函數(shù),存入文本文件中。

      第五篇:IBM POWER8為大數(shù)據(jù)而生

      IBM POWER8為大數(shù)據(jù)而生

      “POWER8全面走向開放,這將給整個IT產(chǎn)業(yè)帶來嶄新的機遇?!盜BM大中華區(qū)副總裁、系統(tǒng)與科技部總經(jīng)理郭仁聲在2014年IBM POWER全新一代系統(tǒng)平臺發(fā)布盛典上這樣總結POWER8帶來的意義。

      開放

      在發(fā)布盛典上,IBM正式發(fā)布POWER8技術并推出一系列全新的Power Systems服務器。據(jù)介紹,IBM為最新Power Systems投入24億美元,歷經(jīng)3年研發(fā),利用數(shù)百種IBM專利創(chuàng)新技術。這些系統(tǒng)基于IBM POWER8芯片,該芯片大小僅有一平方英寸,嵌入了超過40億個微型晶體管、交換機和超過11英里的高速銅線。

      IBM通過OpenPOWER基金會向業(yè)內(nèi)開放了具有數(shù)十年技術積累的POWER相關技術,包括工藝、處理器、I/O、固件、操作系統(tǒng)和軟件等各個層級的技術,這為企業(yè)打造自主、安全、可控的IT產(chǎn)業(yè)鏈提供重要技術基礎。

      IBM Power系統(tǒng)的實時分析能力將極大地提升業(yè)務創(chuàng)新的可能性,如銀行的反欺詐分析、證券交易實時分析,可提升業(yè)務風險防范能力。

      FIS是一家支付處理和銀行解決方案提供商,其解決方案采用新一代POWER8系統(tǒng)和IBM FlashSystem全閃存陣列。FIS分析認為,利用IBM POWER8和IBM FlashSystem存儲陣列相結合的功能和性能,實現(xiàn)了更高的利用率和性能,同時獲得靈活的計算資源,從而滿足客戶的應用處理和業(yè)務交付需求。POWER8能夠提供安全秘鑰加密加速和加密協(xié)處理器功能,F(xiàn)lashSystems能夠提供企業(yè)級的超高性能和超低的應用時延,兩者結合為FIS提供了一種對當前核心銀行應用環(huán)境來說至關重要的基礎架構。

      同時,IBM將繼續(xù)在Power Systems產(chǎn)品線中提供Red Hat和SUSE Linux操作系統(tǒng)配置。

      用戶更多選擇

      新一代Power系統(tǒng)是一個全面為大數(shù)據(jù)設計的系統(tǒng),首批5個基于POWER8的全新Power系統(tǒng),專為大規(guī)模的scale out計算環(huán)境設計,利用率可達65%,分析速度比最新的x86系統(tǒng)快50倍,成為超越x86服務器的更好選擇。

      在利用率和經(jīng)濟性上,本次發(fā)布的S Class服務器極大程度降低了數(shù)據(jù)中心占地空間、電力和冷卻等方面的成本。據(jù)IBM方面測試,一臺高效利用的 S Class服務器可以取代10臺或更多x86服務器(按照業(yè)內(nèi)平均利用率計算)。全新Power Systems的數(shù)據(jù)吞吐量是x86服務器的2倍,從而使數(shù)據(jù)中心占用空間減半。Power8系統(tǒng)更具有內(nèi)置的加密引擎技術,突破性的安全能力,使關鍵應用和數(shù)據(jù)可以放心地放到云上。

      另外,超大規(guī)模云數(shù)據(jù)中心也在尋求x86以外的技術,以實現(xiàn)更完整的自主性。IBM的測試表明,新的1&2插槽Power Systems具有為云提供向外擴張的經(jīng)濟優(yōu)勢。同時,加密內(nèi)置于基礎架構中,安全性更高。Power技術的各種傳統(tǒng)優(yōu)勢和開放創(chuàng)新結合,為企業(yè)需求提供了更多的選擇,而企業(yè)將成為良性競爭的最終受益者。

      此外,IBM還將推出一系列針對合作伙伴的舉措,以推動POWER8的落地和應用,包括注資華勝天成旗下子公司―北京新云系統(tǒng)科技有限責任公司,實現(xiàn)基于 Linux on Power相關的硬件和軟件產(chǎn)品的開發(fā)及銷售,打造企業(yè)級的應用商店。

      下載基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞word格式文檔
      下載基于Struts2 Result Type為chain 的Action之間數(shù)據(jù)傳遞.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發(fā)現(xiàn)有涉嫌版權的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權內(nèi)容。

      相關范文推薦

        以傳遞為題的作文

        2012年中考作文預測(二) 生活中傳遞的現(xiàn)象很多,如傳遞火炬、傳遞快樂、傳遞愛心……傳遞的方式也多樣,這一切都給你諸多感受和啟迪。傳遞不僅是一種形式,更是一個過程。也許你曾......

        為加強班主任之間工作經(jīng)驗的交流大全

        為加強班主任之間工作經(jīng)驗的交流,充分發(fā)揮班主任在系部班級管理中的作用。9月23日晚,我校中職部全體班主任在教學樓三樓會議室召開了九月份經(jīng)驗交流會。 會議由系部趙國軍主任......

        信息如何在神經(jīng)元之間進行傳遞的五篇

        信息如何在神經(jīng)元之間進行傳遞的? 信息在神經(jīng)元之間是通過突觸傳遞的,根據(jù)突觸傳遞媒介物性質的不同,可將突觸分為化學性突觸和電突觸,前者由神經(jīng)遞質介導,后者由局部電流介導。......

        用數(shù)據(jù)說話 為發(fā)展服務

        用數(shù)據(jù)說話 為發(fā)展服務 展統(tǒng)計風采 ―― 焦作市統(tǒng)計局綜合科事跡材料 市統(tǒng)計局是對國民經(jīng)濟和社會發(fā)展情況進行統(tǒng)計調(diào)查、統(tǒng)計分析,提供統(tǒng)計資料和咨詢意見,實行統(tǒng)計監(jiān)督的重......

        2007廣東高考作文題:以“傳遞”為話題

        同學們是不是還在為高考作文寫作缺乏素材而煩惱,精品小編在這里為大家整理了2007廣東高考作文題:以傳遞為話題,希望同學們可以從中學到一些寫作技巧,祝大家閱讀愉快。 閱讀下面......

        以愛的傳遞為主體的演講稿

        記憶的長河里,存有不隨時間黯淡的意象:十堰公交車上,一個年輕人優(yōu)雅的起身,旁邊一個老人滿懷感激的向他點頭。這是公交車上讓座的一幕。哥哥曾開玩笑說在十堰的公交車上讓座是一......

        我為中國夢傳遞正能量

        實現(xiàn)中國夢,傳遞正能量 中國夢的本質內(nèi)涵是實現(xiàn)中華民族的偉大復興。用習總書記的話說就是實現(xiàn)國家富強、民族振興、人民幸福。中國夢是歷史的又是現(xiàn)實的,它既深深地植根于中......

        為實現(xiàn)中國夢傳遞正能量

        為實現(xiàn)中國夢傳遞正能量] 據(jù)新華社電 面對新形勢新任務,新聞媒體應該承擔怎樣的社會責任?16日上午,中國記協(xié)和全國三項教育辦公室舉行“我為實現(xiàn)中國夢傳遞正能量記者社會責任......