1.動的ActionForm。
前回の記事では静的ベースのActionFormを実装しており、すべてのフォームでActionFormを作成する必要がある場合は、ActionFormが多すぎます。次に、Strutsは動的DynaActionFormを使用して上記の問題を解決でき、新しいActionFormを作成せずに構成するだけで済みます。
①構成:
<form-beans>
<!-- 定义DynaActionForm,至少指定两个属性: name(自定义) , type 指定Struts中的路径 -->
<form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="userName" type="java.lang.String"/>
<form-property name="pswd" type="java.lang.String"/>
</form-bean>
</form-beans>
②アクションの値は、フォームをDynaActionFormに強制することで取得され、取得するオブジェクトの値は、マップのキー/値getString(name)と同様であり、nameは属性名です。
public class DynaAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
DynaActionForm form2 = (DynaActionForm) form;
String userName = form2.getString("userName");
String pswd = form2.getString("pswd");
if ("admin".equals(userName) && "admin".equals(pswd)) {
System.out.println(userName+" " + pswd);
return mapping.findForward("error");
}
return mapping.findForward("error");
}
}
2.DispathAction
ユーザーを追加、削除、変更、および確認する場合は、次の2つの方法があります。
①機能を実現するための4つのアクションの作成は非常に複雑で管理が難しい。
②DispathActionを使用すると、executeメソッドを書き直す必要はありませんが、実装する必要のあるActionメソッドを定義します。
③構成:DispathActionには、xml構成のActionよりも1つ多くのパラメーター属性があり、DispathActionメソッドにアクセスするためにフィールドをカスタマイズします。
<action-mappings>
<action path="/login" type="com.example.UserAction" name="dynaForm_2"
scope="request" parameter="method">
<!-- 配置局部Forward -->
<forward name="welcome" path="/index.jsp" />
<forward name="input" path="/login.jsp" />
<forward name="main" path="/main.jsp"></forward>
<forward name="add" path="/add_success.jsp"></forward>
<forward name="delete" path="/delete_success.jsp"></forward>
<forward name="modify" path="/modify_success.jsp"></forward>
</action>
</action-mappings>
④実現:
public class UserAction extends DispatchAction{
public ActionForward add(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("add");
}
public ActionForward delete(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("delete");
}
public ActionForward modify(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("modify");
}
}
⑤アクセス方法:
<a href="login.do?method=add">add</a><br>
<a href="login.do?method=delete">delete</a><br>
<a href="login.do?method=modify">modify</a><br>
3.MappingDispathAction
DispathActionが使用されるたびに同じパラメータフィールドが使用されますが、これはエラーが発生しやすいため、MappingDispathActionを使用できます。
①構成:パラメータの名前は、アクションの名前と完全に同じである必要があります。
<action path="/add" type="com.example.UserMapAction" name="dynaForm_2"
scope="request" parameter="add"></action>
<action path="/delete" type="com.example.UserMapAction" name="dynaForm_2"
scope="request" parameter="delete"></action>
<action path="/modify" type="com.example.UserMapAction" name="dynaForm_2"
scope="request" parameter="modify"></action>
②実現:
public class UserMapAction extends MappingDispatchAction{
public ActionForward add(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("add");
}
public ActionForward delete(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("delete");
}
public ActionForward modify(ActionMapping arg0, ActionForm arg1,
HttpServletRequest arg2, HttpServletResponse arg3) throws Exception {
// TODO Auto-generated method stub
PrintWriter out=arg3.getWriter();
out.println("add!!!!!");
return arg0.findForward("modify");
}
}
③アクセス方法:
<a href="add.do">add_mapping</a><br>
<a href="delete.do">delete_mapping</a><br>
<a href="modify.do">modify_mapping</a><br>