今天研究了一下JpetStore源代码 ,发现它的开发strust模式和我们以往开发的模式完全不同,所有的strust类都继承org.apache.struts.beanaction.BaseBean
仔细研究BeanAction类,发现它其实是一个通用类,利用反射原理,根据URL来决定调用formbean的哪个方法!
一个简单的例子
package strutstest.action;
// 继承BaseBean
import org.apache.struts.beanaction.BaseBean;
public class TestBean extends BaseBean {
public static final String SUCCESS = " success " ;
public static final String FAILURE = " failure " ;
public TestBean() {
}
private String id;
private int age;
private String name;
private String address;
// getter setter
// 定义几个业务方法
public String saveUser()
{
System.out.print( " 添加用户.. " );
// 这里返回一个字符串,将自动导向成功页
// 对应的是 forward 的名称
return SUCCESS;
}
public String updateUser()
{
System.out.print( " update user.. " );
return SUCCESS;
}
public String getUser()
{
if (id == null )
{
System.out.print( " 没有此用户 " );
// 导向失败
retutn FAILURE;
}
System.out.print( " 用户id= " + id);
return SUCCESS;
}
strust-config.xml配置文件
< struts-config>
< form-beans>
< form-bean name="testBean" type="strutstest.action.TestBean" />
< /form-beans>
< action-mappings>
< action name="testBean" path="/test/saveUser" type="org.apache.struts.beanaction.BeanAction">
< forward name="success" path="/success.html" />
< /action>
< action name="testBean" parameter="*" path="/test/index" type="org.apache.struts.beanaction.BeanAction" validate="false">
< forward name="success" path="/user.jsp" />
< /action>
< action name="testBean" path="/test/updateUser" type="org.apache.struts.beanaction.BeanAction">
< forward name="success" path="/success.html" />
< /action>
< action name="testBean" path="/test/getUser" type="org.apache.struts.beanaction.BeanAction" >
< forward name="success" path="/success.html" />
< /action>
< /action-mappings>
说明|:
Struts-config.xml的配置里有3种映射方式,来告诉BeanAction把控制转到哪个form bean对象的哪个方法来处理。
< action name="testBean" path="/test/saveUser" type="org.apache.struts.beanaction.BeanAction">
< forward name="success" path="/success.html" />
< /action>
此种方式表示,控制将被转发到"testBean"这个form bean对象 的"savaUser"方法(行为)来处理。方法名取"path"参数的以"/"分隔的最后一部分。
parameter="*"
此 种方式表示,form bean上没有任何方法被调用。如果存在"name"属性,则struts把表单参数等数据填充到form bean对象后,把控制转发到"success"。否则,如果name为空,则直接转发控制到"success"。这就相当于struts内置的 org.apache.struts.actions.ForwardAction的功能
前台调用
< html:link page="/test/saveUser.do">
saveUser
< /html:link>
< html:link page="/test/getUser.do?id=22">
getUser
< /html:link>
< html:link page="/test/updateUser.do">
UpdateUser
< /html:link>
< /body>
< /html:html>