Q. 日本語環境

フラグメントページにデータ値を渡す際は必ず escape !

EWD.ajax.getPageなどで、フラグメントページにデータ値を渡す場合は、必ず、escape関数でエンコードする。

<ext4:fragment onBeforeRender="getChartData12^ext4Chart">
  
  <ext4:js at="top">
    EWD.ext4.popupWindow = function(item) {
      var nvp="month=" + escape(item.storeItem.get('month')) + "&score=" + escape(item.storeItem.get('Bチーム'));
      EWD.ajax.getPage({page:'chartPopup',nvp:nvp});
    };
  </ext4:js>
  ..... etc
    <ext4:series type="line" 
      axis="left" xField="month" yField="Bチーム">
      <ext4:tips trackMouse="true" width="80" height="30" renderer=".EWD.ext4.showTip" />
      <ext4:listeners>
        <ext4:listener itemmousedown="function(item) {EWD.ext4.popupWindow(item)}" />
      </ext4:listeners>
    </ext4:series>
  ..... etc
</ext4:fragment>
上記の場合、"&score=" + item.storeItem.get('Bチーム')  だと、chartPopup.ewd側で受け取った セッション変数 score の内容が文字化けします。

ページのエンコード

コンテナページもフラグメントページも、ファイルは必ずUTF-8で保存しましょう。
それから、ページの中に、charset が utf-8 になるようにMETAタグを挿入しましょう。
<ext4:container rootPath="/mta/ext-4" title="EDWページ">
  
  <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8">
  <link href="/ext-4/examples/menu/menus.css" />
  <script type="text/javascript" src="/mta/ext-4/locale/ext-lang-ja.js"></script>

  ...... etc

</ext4:container>

URLメソッドのPOSTとGET

ExtJS4のメソッドが、自動的にGETになったりPOSTになったりする。
現在分析中:参考URL  
http://stackoverflow.com/questions/7316967/extjs-4-problems-with-jsonstore-post-request

引用:ExtJS4 actionMethods
http://docs.xenophy.com/ext-js/4-0/#/api/Ext.data.proxy.Ajax-property-actionMethods 

HTTPリクエストメソッドのアクション名をマッピングします。 基本のAjaxProxyでは、readアクションにはGETを、create, update, destroy アクションにはPOSTがマップされています。 Ext.data.proxy.Rest では、それぞれが的確なRESTのメソッドにマップされます。
なので、GETもPOSTもある。

EWDの送信文字列をescapeエンコードし受け側(GT.M)でデコードする

Google Group Enterprise Web Developer Community の記事
EWD Build 914 の時点では、コンテナページのJavaScript内で、エスケープ文字の処理がいまいちです。例えば、item.xtype === 'textfield' や、
datafiled内の、'value' と 'originalValue' は、エスケープエンコードされていない。
なので、
_zewdExt4.m を修正し、なおかつ、GT.M側(^%zewdGTMRuntime)のデコードもunicode対応とするパッチを作成。

EWD送信文字列のescapeエンコード

Formのsubmitt時や、DataFiled修正時の送信時の送信文字をescape関数でエスケープする。
パッチのダウンロード: 
zewdExt4_EscapeStrings.diff 
パッチ一部抜粋:
修正前
'&value=' + value + '&originalValue=' + ov;"_$c(13,10)
修正後
'&value=' + escape(value) + '&originalValue=' + escape(ov);"_$c(13,10)

GT.M側(^%zewdGTMRuntime)でデコード

送られて来たエスケープ文字(%uHHHH形式や%HHHH形式)を文字列にデコードする。 
$$urlUnescape^$zewdGTMRuntime()
urlUnescape(esc)	;
	; Function converts form a JavaScript escaped string to a string with ASCII & UTF-8 charset
	; Input : esc : string source escaped with Javascript's escape() function
	; return strings with ASCII & UTF-8
	; K.Sawada 2012/05/14 18:43
	;
	i esc'["%" QUIT esc
	n c,string,pos,length
	n unicodeHexVal,unicode,hex,hexVal
	s string="",pos=1
	s length=$l(esc)
	f  q:pos>length  d
	. s c=$e(esc,pos)
	. i c="%" d
	. . s pos=pos+1
	. . s c=$e(esc,pos)
	. . i c="u" d
	. . . ;  a unicode character
	. . . s pos=pos+1
	. . . s unicodeHexVal=$e(esc,pos,pos+3)
	. . . s unicode=$$hexToDecimal(unicodeHexVal)
	. . . s string=string_$$code2utf(unicode)
	. . . s pos=pos+4
	. . e  d
	. . . ; an escaped ascii character
	. . . s hexVal=$e(esc,pos,pos+1)  u $p w !,hexVal,"  "
	. . . s hex=$$hexToDecimal(hexVal)  u $p w hex,"  "
	. . . s string=string_$c(hex)  u $p w $c(hex)
	. . . s pos=pos+2
	. e  d
	. . s string=string_c
	. . s pos=pos+1
	QUIT string
	;
code2utf(num)	;
	; Function to convert UTF-8 character input num that number  2012/05/09 09:51 K.Sawada
	; input para: num : integer
	; return    : utf8char
	i num<128     QUIT $c(num)
	i num<2048    QUIT $ZCHAR(num\64+192,num#64+128)
	i num<65536   QUIT $ZCHAR(num\4096+224,(num\64)#64+128,num#64+128)
	i num<2097152 QUIT $ZCHAR(num\262144+240,(num\4096)#64+128,(num\64)#64+128,num#64+128)
	QUIT ""
	;

ExtJSのメッセージを日本語化する方法

原典引用先:http://memono.blogspot.jp/2008/02/extjs_886.html

ExtJSには日本語のリソースファイルが用意されているので、コンポーネント等が表示するメッセージを日本語にしたい場合は、source/locale/ext-lang-ja.jsを追加で読み込みます。
日本語リソースを適用する場合のEWD ExtJS4サンプル
<ext4:container rootPath="/mta/ext-4" title="Extjs Test">

  <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8">
  <script type="text/javascript" src="/mta/ext-4/locale/ext-lang-ja.js"></script>
  
  <ext4:formPanel id="myFormPanel" >
   ........
  </ext4:formPanel>
  
  <ext4:panel id="secondPanel" width="500" height="100" />
</ext4:container>
ext-lang-ja.jsは通常のメッセージの日本語に置き換えているだけです。もし日本語化されていない部分があれば、同じように定義することもできます。

保存ファイルの文字コードに注意!

コンテナページもフラグメントページも、保存ファイル(.ewd) は、UTF-8で保存してください。Shift-JISやANSIで保存するとエラーが生じ、EWDの処理が止まります。




ċ
zewdExt4_EscapeStrings.diff
(1k)
Kiyoshi Sawada,
2012/05/14 20:07
Comments