2014年4月13日日曜日

intra-mart FORMタグを利用したaction処理の解決方法

IMARTタグのformでは、同じ画面内や画面遷移の不要なサーバリクエストを呼び出す
action属性がありました。

IMARTタグのformが非推奨となり、htmlのFORMタグを利用すべきなのですが

その場合、IMARTタグで使っていたactionの処理をどうするのかが、良くわかりませんでした。

以下は、APIのaction属性の説明部分です。

------
属性 action は、このリンクにより intra-mart がコールされた際に、同ページのファンクション・コンテナ内に定義されている関数をリクエスト時に起動するための指定で、起動させたい関数名称を指定する事で可能になります。
action 関数の実行は、次に表示するべきページの作成処理(該当ページのファンクション・コンテナ内 init() 関数)よりも先に動作します。
------

しかし、htmlのFORMタグのaction属性は、遷移先のURLを設定する場所です。もちろんpage属性なんてありません。


解決方法1 hidden項目を作る

name="action" というhidden項目を作って、javascriptでサーバリクエスト(画面遷移)イベント発生時に、valueの内容を呼び出し関数名を設定する。

ファンクション・コンテナのinit関数で、それを受けて呼び出すという仕組みです。
function init(request) {
  if (request.action != undefined) {
    if (request.action === "insXxx") {
        insertXxx();
    }
    ...
}

解決方法2 ルーチングのPathVariablesを使う

以下の説明を見ると、ルーチングを使うことで、URLの最後のディレクトリ名を
パラメータとして扱えるようにできるようです。
intra-mart Accel Platform / スクリプト開発モデル プログラミングガイド

<file-mapping path="/webpath/bar/{action}" page="realpath/bar">

この場合は、サーバリクエスト(画面遷移)イベント発生時に、
formタグのaction属性の内容を
登録ボタン ... action="/webpath/bar/insXxx"
削除ボタン ... action="/webpath/bar/delXxx"

というよう設定することになります。

0 件のコメント:

コメントを投稿