LookupDispatchAction
dispatchアクションの選択にはよくボタンが使われますが、他言語サポートのアプリケーションなどでは、ユーザのロケールによってボタンのラベルが違ったりするので問題がでてきます。 例えば英語と日本語をサポートしているサイトのフォームでは、ボタンがdeleteだったり消去だったりするわけです。 そんな場合に役立つのが、Struts1.1からできたLookupDispatchActionです。
action-mappingはDispatchActionと同じです。
<action path="/recordAction"
type="app.RecordLookupDispatchAction"
name="recordForm"
scope="request"
input="record.jsp"
parameter="method"> ←methodという名前でパラメータの受渡しをします。
<forward name="success" path="confirm.jsp"/>
</action>
button.create=Create
button.delete=Delete
button.update=Update
button.create=追加
button.delete=削除
button.update=変更
<html:form action="/recordAction"><html:submit property="method">
<bean:message key="button.create"/>
</html:submit><html:submit property="method">
<bean:message key="button.delete"/>
</html:submit><html:submit property="method">
<bean:message key="button.update"/>
</html:submit></html:form>
そしてDispatchActionの時のように各メソッドを作成するんですが、その前にインプリメントしないといけないのが、getKeyMethodMapです。
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("button.create", "create");
map.put("button.delete", "delete");
map.put("button.update", "update");
return map;
}public ActionForward create (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {...}public ActionForward delete (
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {...}
...
マッチしないキー(例えば上の例で"add"など)がパスされた場合はexceptionになります。また、同じキーが2つ以上ある場合は、最初に見付けられたものが使われます。