例如我们做数据库的增加,修改时,如果把两个功能用两个Action来操作,这也是可行的,但两个功能很显然有相同的地方,例如都需要相同的数据验证.为了减少数据冗余度,增加可维护性.我们用LookUpDispatchAction类来实现这两种功能.
好了我们来具体的分析一下吧.
第一步:创建一个项目一个
jsp
页面(
MyJsp.jsp
)
<
html:form
action
=
"login"
method
=
"post"
>
<
bean:message
key
=
"label.username"
/>
<
html:text
property
=
"userName"
/>
<
bean:message
key
=
"label.passWord"
/>
<
html:password
property
=
"password"
/>
<
html:submit
property
=
"action"
>
<
bean:message
key
=
"button.add"
/>
</
html:submit
>
<
html:submit
property
=
"action"
>
<
bean:message
key
=
"button.update"
/>
</
html:submit
>
<html:errors><!—
用于显示验证时出现的错误
-->
</
html:form
>
第二步:
applicationResources.properties
资源文件代码如下
label.username=usename
label.password=password
button.add=add
button.update=update
error.required={0} is required
error.username.length =Username must longer than 3
error.password.length =Password must longer than 3
第三步:创建一个
ActionForm
用于封装表单这里我以
LoginForm
命名代码如下:
package supermarket.dept.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
public class LoginForm extends ActionForm {
private String userName;
private String passWord;
public String getUserName() {
return username;
}
public void setUserName(String username) {
this.userName = userName;
}
/**
* Method validate
用于验证表单
* @param mapping
* @param request
* @return ActionErrors
*/
public ActionErrors validate(
ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(this.username==null || this.username.length()<1){
ActionMessage error = new ActionMessage("error.required","User Name");
errors.add("user",error);
}
if(this.username.length()<3){
errors.add("userLength",new ActionMessage("error.username.length"));
}
if(this. passWrod ==null || this. passWrod.length()<1){
ActionMessage error = new ActionMessage("error.required","User Name");
errors.add("passWrod ",error);
}
if(this. passWrod.length()<3){
errors.add("userLength",new ActionMessage("error. passWrod.length"));
}
return errors;
}
/**
* Method reset
* @param mapping
* @param request
*/
public void reset(ActionMapping mapping, HttpServletRequest request) {
// TODO Auto-generated method stub
}
public String getPassWord() {
return password;
}
public void setPassWord(String password) {
this.password = passWord;
}
}
第四步:创建
Action
这里的
Action
继承了
LookUpDispatchAction
我以
LoginAction
命名.代码如下:
package com.lyx.struts.action;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.LookupDispatchAction;
public class LoginAction extends LookupDispatchAction {
public ActionForward add(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
System.out.print("add");
// TODO Auto-generated method stub
return null;
}
public ActionForward update(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
System.out.println("update");
// TODO Auto-generated method stub
return null;
}
protected Map getKeyMethodMap() {
System.out.print("hello map");
Map map=new HashMap();
map.put("button.add","add");
map.put("button.update"," update");
// TODO
自动生成方法存根
return map;
}
}
注意:这里要把
execute
方法删掉.要不然不起作用.
getKeyMethodMap()
是一个抽象方法,必须得实现.这里用于映射.
第五步:给出
Strut-config.xml
配置文件的信息.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
struts-config
>
<
data-sources
/>
<
form-beans
>
<
form-bean
name
=
"loginForm"
type
=
"com.lyx.struts.form.LoginForm"
/>
</
form-beans
>
<
global-exceptions
/>
<
global-forwards
/>
<
action-mappings
>
<
action
input
=
"/MyJsp.jsp"
name
=
"loginForm"
parameter
=
"action"
path
=
"/login"
type
=
"com.lyx.struts.action.LoginAction"
/>
</
action-mappings
>
<
message-resources
parameter
=
"com.lyx.struts.ApplicationResources"
/>
</
struts-config
>
注意:这里
Action
里的
Parameter
属性的值是表单提交按钮属性的值.
第六步:
Ok
了.测试一下吧
点
Add
在控制台上输出
Add
点
update
在控制台上输出
update