LookupDispatchActionクラスの使用説明
org.apache.struts.actions.LookupDispatchActionカテゴリはDispatchActionカテゴリのサブクラスであり、DispatchActionと同様に、要求上のパラメータを介してどの方法を実行するかを決定するが、LookupDispatchActionはメッセージリソースファイルを照会する機能が多く、LookupDispatchActionの用途の一つは、1つのフォームに2つ以上のボタンが含まれている場合、メッセージ・リソース・ファイルをクエリーすることによって、対応するアクションを決定できます.
直接例として説明します.LookupDispatchActionを継承した後、getKeyMethodMap()メソッドを再定義し、次のような独自の処理方法を定義します. EditAction.java
メッセージ・リソース・アーカイブには、次のメッセージが含まれているとします. messages.properties
LookupDispatchActionを使用するにはstruts-config.xmlでは、要求パラメータに含まれる名前を定義します. struts-config.xml
次に、フォームページに次の内容が含まれているとします.
...
...
いずれかのボタンを押すと、要求パラメータにはmethod=Saveまたはmethod=Previewまたはmethod=Resetが含まれます.method=Saveと仮定すると、LookupDispatchActionはそれに基づいてvalueとしてメッセージ情報ファイルに対応するkeyを見つけ、keyとgetKeyMethodMap()に基づいて実行する方法がsave()メソッドであることがわかります.
では、国際化されたメッセージ管理の部分については?例えばフォームボタンで中国語を使いたいですか?
...
...
同様に、メッセージ・アーカイブには次の内容が含まれている必要があります. messages.properties
次に、native 2 asciiを使用して、メッセージ・アーカイブをUnicode符号化に変換します.たとえば、次のようにします.
native2ascii messages_zh_TW.txt messages_zh_TW.properties
次の質問は、ブラウザから送られてきた中国語のパラメータを正確に解析するためにrequestのsetCharacterEncoding(「Big 5」)を使用して、正しい中国語のパラメータを得ることができますが、どこでこの動作をしますか?サーブレットFilterでは、ActionFormのreset()メソッドで次のようなことができます.
package onlyfun.caterpillar;
public class UserForm extends ActionForm {
......
public void reset(ActionMapping mapping,
HttpServletRequest request) {
try {
request.setCharacterEncoding("Big5");
.......
}
catch(Exception e) {
....
}
}
}
これであなたのボタンは中国語のメッセージを使うことができます.
よろしければ、組み合わせてご利用いただけます
<bean:message>は、上記の機能を使用して、メッセージファイル内のメッセージを直接ラベルによって管理する.
直接例として説明します.LookupDispatchActionを継承した後、getKeyMethodMap()メソッドを再定義し、次のような独自の処理方法を定義します.
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.struts.actions.*;
public class EditAction extends LookupDispatchAction {
protected Map getKeyMethodMap() {
Map map = new HashMap();
map.put("button.save", "save");
map.put("button.preview", "preview");
map.put("button.reset", "reset");
return map;
}
public ActionForward save(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// ......
}
public ActionForward preview(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// ......
}
public ActionForward reset(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// ......
}
}
メッセージ・リソース・アーカイブには、次のメッセージが含まれているとします.
button.save=Save
button.preview=Preview
button.reset=Reset
LookupDispatchActionを使用するにはstruts-config.xmlでは、要求パラメータに含まれる名前を定義します.
...
<action path="/edit"
type="onlyfun.caterpillar.EditAction"
parameter="method"
name="editForm"/>
...
次に、フォームページに次の内容が含まれているとします.
...
...
いずれかのボタンを押すと、要求パラメータにはmethod=Saveまたはmethod=Previewまたはmethod=Resetが含まれます.method=Saveと仮定すると、LookupDispatchActionはそれに基づいてvalueとしてメッセージ情報ファイルに対応するkeyを見つけ、keyとgetKeyMethodMap()に基づいて実行する方法がsave()メソッドであることがわかります.
では、国際化されたメッセージ管理の部分については?例えばフォームボタンで中国語を使いたいですか?
...
...
同様に、メッセージ・アーカイブには次の内容が含まれている必要があります.
button.save=
button.preview=
button.reset=
次に、native 2 asciiを使用して、メッセージ・アーカイブをUnicode符号化に変換します.たとえば、次のようにします.
native2ascii messages_zh_TW.txt messages_zh_TW.properties
次の質問は、ブラウザから送られてきた中国語のパラメータを正確に解析するためにrequestのsetCharacterEncoding(「Big 5」)を使用して、正しい中国語のパラメータを得ることができますが、どこでこの動作をしますか?サーブレットFilterでは、ActionFormのreset()メソッドで次のようなことができます.
package onlyfun.caterpillar;
public class UserForm extends ActionForm {
......
public void reset(ActionMapping mapping,
HttpServletRequest request) {
try {
request.setCharacterEncoding("Big5");
.......
}
catch(Exception e) {
....
}
}
}
これであなたのボタンは中国語のメッセージを使うことができます.
よろしければ、組み合わせてご利用いただけます
<bean:message>は、上記の機能を使用して、メッセージファイル内のメッセージを直接ラベルによって管理する.