Action的实现方式有3种,如下:
1.普通Java类(pojo),必须定义一个execute()方式,返回值为String类型,如下:
public classUserAction {
private String name;
public String getName() {
return name;
}
public voidsetName(String name) {
this.name = name;
}
public String execute(){
if("zhangsan".equals(name)){
return "success";
}else{
return "error";
}
}
}
2.实现Action接口,如下:
public classUsernameAction implements Action{
private String name;
public String getName() {
return name;
}
public voidsetName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception{
// TODOAuto-generated method stub
return null;
}
}
3.继承ActionSupport类:在struts.xml中配置action时,如果没有指明处理类(即没有设置action的class属性值),那么默认使用ActionSupport类作为处理类。
public classTestAction extends ActionSupport{
private String name;
public String getName() {
return name;
}
public voidsetName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception{
if("zhangsan".equals(name)){
return "success";
}else{
return "error";
}
}
@Override
public voidvalidate() {
if(name.length()< 4){
//调用addFieldError()方法,会自动返回input
this.addFieldError("no", "用户名不能少于4位");
}
}
}
在struts.xml中配置:
<action name="test" class="com.study.test.TestAction">
<result name="success">success.jsp</result>
<result name="error">error.jsp</result>
<!-- 对应addFieldError()方法返回的input -->
<result name="input">no.jsp</result>
</action>
在JSP页面中获取validate()方法中this.addFieldError()传出的属性值:
当然首先得在JSP页面上方引入struts的标签库:
<%@taglib prefix="s" uri="/struts-tags"%>
然后在body中写入:
<s:fielderror>
<s:param>no</s:param>
</s:fielderror>
即可获取到传出来属性名为"no"的属性值